Web.API中的一对多关系

本文关键字:一对多 关系 API Web | 更新日期: 2023-09-27 17:50:37

我试图使用实体框架创建一个一对多的关系,使用Web转换json对象。API返回。

我正在创建一个场景,用户有许多功能电子邮件。

然而,带来的User实体中的json文件包含一个始终显示为空的电子邮件列表。

用户实体

[DataContract]
public class UsuarioEntity : BaseEntity
{
    [DataMember]
    public string UserName { get; set; }
    [DataMember]
    public string Password { get; set; }
    [DataMember]
    public bool Ativado { get; set; } 
    [DataMember] 
    public ICollection<EmailEntity> Emails { get; private set; }
}

邮件实体

 [DataContract]
public class EmailEntity : BaseEntity
{
    [DataMember]
    public string Email { get; set; }
    [DataMember]
    public bool Ativo { get; set; }
    [DataMember]
    public bool Principal { get; set; }
    [DataMember]
    public DateTime DataCadastro { get; set; }
    [DataMember]
    public UsuarioEntity Usuario { get; set; }
} 

Fluent API

UsuarioConfiguration

            ToTable("tbl_usuarios");
        HasKey(a => new {a.Id, a.UserName});
        Property(a => a.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .HasColumnName("cd_id_usuario");
        Property(a => a.UserName)
            .HasMaxLength(32)
            .HasColumnName("nm_usuario");
        Property(a => a.Password)
            .IsRequired()
            .HasMaxLength(32)
            .HasColumnName("tx_senha");
        Property(a => a.DataCadastro) 
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed)
            .HasColumnType("datetime")
            .IsRequired()
            .HasColumnName("dt_cadastro");
        HasMany(o => o.Emails)
            .WithRequired();

EmailConfiguration

            ToTable("tbl_email_usuario");
        HasKey(a => new { a.Id, a.Email });
        Property(a => a.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .HasColumnName("cd_id_email");
        Property(a => a.Email)
            .HasMaxLength(150)
            .HasColumnName("nm_email");
        Property(a => a.DataCadastro)
            .HasColumnType("datetime")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed)
            .IsRequired()
            .HasColumnName("dt_cadastro")

我尝试使用EF与Web api:

public IQueryable<UsuarioEntity> Get()
{
    PlainContext context = new PlainContext();
    return context.Usuarios;
}

除了不期望返回

[{"Id":1,"Ativado":true,"DataCadastro":"'/Date(1357307720730-0200)'/","Emails":[],"Password":"senha456","UserName":"recapix"}]

我拥有和注册的电子邮件只有他们不出现在Json。

Web.API中的一对多关系

你的实体不支持延迟加载,所以你必须明确定义你想要加载相关的电子邮件:

return context.Usarios.Include(u => u.Emails);