2017-03-07 97 views
0

我尝试使用实体框架的代码第一和流畅API来实现一对多的关系实体框架6.0一对多的关系是行不通的

在一边,我有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); 
... 
} 

,但它不工作。集合总是空的。

我在做什么错?

+0

根据配置,我会说,它看起来OK。 由于其他原因,您的收藏可能为空:您是否有任何机会禁用了懒加载? –

+0

您是否尝试在您的'ClassDefinitionEntity'中添加Include(e => e.PublishingDefinitions)'来检索查询?或者如果你想延迟加载的行为,使集合属性'虚拟'。 –

+0

@AkosNagy:thx的更新,我检查了LazyLoadingEnabled属性的OnModelCreating。它没有设置。我想要加载。 – webpat

回答

2

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

EG:

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

Entity Framework Loading Related Entities

+0

我的DbSet .Include方法只接受字符串,而不是lambda函数... – webpat

+0

不知道为什么你的include方法不接受lambda函数,我试过用EF 6和EF核心,并且在两种情况下它们都接受lambda表达式。也许尝试使用Idbset?或者将所有的dbset放入继承自Dbcontext的类中。另请检查您的使用说明和您的EF版本。否则,字符串路径应该是“PublishingDefinitions”,这应该在你的include方法中工作。 –

+0

@IvanStoev在他的评论中明确表示:Include(函数 path)方法位于** System.Data.Entity **名称空间的** QueryableExtensions **类中 – webpat