2

エンティティフレームワークを使用して1対多の関係を作成し、Web.APIリターンを使用してjsonオブジェクトを変換しようとしています。

ユーザーが多くの機能のメールを持っているというシナリオを作成しています。

ただし、をもたらす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")

私はこのようにWebAPIでEFを使用しようとしました:

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

返品が期待されていなかったことを除いて

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

私はEメールを所有して登録していますが、Jsonには表示されません。

4

1 に答える 1

1

エンティティは遅延読み込みをサポートしていないため、関連するメールも読み込むことを明示的に定義する必要があります。

return context.Usarios.Include(u => u.Emails);
于 2013-01-04T14:26:48.590 に答える