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)
| 归档时间: |
|
| 查看次数: |
4039 次 |
| 最近记录: |