【问题标题】:entity framework Code First One-to-Many relationships in Web.APIWeb.API 中的实体框架 Code First 一对多关系
【发布时间】:2013-01-04 14:03:01
【问题描述】:

我正在尝试使用实体框架创建一对多关系,以使用 Web.API 返回转换 json 对象。

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

但是,带来的用户实体中的 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();

电子邮件配置

            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 上。

【问题讨论】:

  • 它们是从数据库中获取但没有出现在响应 XML/JSON 中还是根本没有从数据库中获取
  • 我正在尝试获取数据库并序列化为 json 文件,将电子邮件列表始终为空,我将项目放入数据库中..
  • 你是直接放的还是通过ef放的?
  • 是的,我把数据来自迁移的种子

标签: c# entity-framework asp.net-web-api one-to-many relationship


【解决方案1】:

您的实体不支持延迟加载,因此您必须明确定义也要加载相关电子邮件:

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

【讨论】:

  • 工作,但我在 Include 中使用了列的字符串名称 ...Lambda 不工作 ...谢谢 Man ..
  • 如果在命名空间声明中包含 System.Data.Entity,则可以使用 lambdas
  • 当我使用include的时候,我在调用api时得到了Bad gateway response,请问你能想到什么可能导致这个问题吗?
猜你喜欢
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 2013-11-24
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多