实体框架 6.0 一对多关系不起作用

web*_*pat 1 c# entity-framework ef-code-first

我尝试使用实体框架与代码优先和流畅的API来实现一对多关系

一方面,我有ClassDefinitionEntity类:

 public class ClassDefinitionEntity{   

    public string LocalClassIsin { get; set; }
    public  ICollection<PcfPublishingDefinitionEntity> PublishingDefinitions { get;  set; }

    public ClassDefinitionEntity()
    {
        PublishingDefinitions = new List<PcfPublishingDefinitionEntity>();
    }
}
Run Code Online (Sandbox Code Playgroud)

在许多方面,PcfPublishingDefinitionEntity类:

public class PcfPublishingDefinitionEntity
{
    public int ClassId { get; set; }
    public ClassDefinitionEntity ClassDefinition { get; set;}
    public PcfFormatEnum Format { get; set; }
    public PcfPublishingChannelEnum Channel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的列名称不遵循实体约定,因此OnModelCreating中的代码如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder){
...
        modelBuilder.Entity<PcfPublishingDefinitionEntity()
           .ToTable("IFM_PCF_PUBLISHING_DEFINITION");
        modelBuilder.Entity<PcfPublishingDefinitionEntity>()
           .HasKey(e => new { e.ClassId, e.Channel, e.Format });
        modelBuilder.Entity<PcfPublishingDefinitionEntity>()
           .Property(e => e.Channel)
           .HasColumnName("PUBLICATION_CHANNEL");
        modelBuilder.Entity<PcfPublishingDefinitionEntity>()
            .Property(e => e.Format)
            .HasColumnName("PUBLICATION_FORMAT");
        modelBuilder.Entity<PcfPublishingDefinitionEntity>()
            .Property(e => e.ClassId)
            .HasColumnName("CLASS_ID");
        modelBuilder.Entity<PcfPublishingDefinitionEntity>()
            .HasRequired(pd => pd.ClassDefinition)
            .WithMany(cd => cd.PublishingDefinitions)
            .HasForeignKey(pd => pd.ClassId);
...
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用。出版定义为空。

我究竟做错了什么 ?

小智 6

EF 中一对多或多对多的标准约定我认为是延迟加载,这意味着您必须告诉数据库在从数据库获取数据时包含该集合。如果您使用 linq,请使用 .include。

例如:

yourdbcontext.ClassDefinitionEntity.Include(x => x.PublishingDefinitions).ToList(); 
Run Code Online (Sandbox Code Playgroud)

实体框架加载相关实体