繁体   English   中英

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

[英]Entity Framework 6.0 One to Many relationship is not working

我尝试先将Entity Framework与代码结合使用,并使用流利的api来实现一对多关系

一方面,我有ClassDefinitionEntity类:

 public class ClassDefinitionEntity{   

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

    public ClassDefinitionEntity()
    {
        PublishingDefinitions = new List<PcfPublishingDefinitionEntity>();
    }
}

在很多方面, PcfPublishingDefinitionEntity类:

public class PcfPublishingDefinitionEntity
{
    public int ClassId { get; set; }
    public ClassDefinitionEntity ClassDefinition { get; set;}
    public PcfFormatEnum Format { get; set; }
    public PcfPublishingChannelEnum Channel { get; set; }
}

我的列名不遵循实体约定,因此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);
...
}

但这不起作用。 PublishingDefinitions集合始终为空。

我究竟做错了什么 ?

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

例如:

yourdbcontext.ClassDefinitionEntity.Include(x => x.PublishingDefinitions).ToList(); 

实体框架加载相关实体

如果启用了延迟加载,请确保在关系中包括单词virtual 这将帮助EF延迟加载该实体。 请参阅https://docs.microsoft.com/zh-cn/ef/ef6/querying/related-data ,以获取有关延迟加载以及启用此类功能时如何加载实体的更多信息。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM