Entity framework 4 实体框架代码-使用部分键的第一个自定义映射
是否可以先使用实体框架代码进行以下映射Entity framework 4 实体框架代码-使用部分键的第一个自定义映射,entity-framework-4,frameworks,ef-code-first,entity,Entity Framework 4,Frameworks,Ef Code First,Entity,是否可以先使用实体框架代码进行以下映射 public class Parent { [Key] public int ID {get; set;} public string statecode{get; set;} public virtual ICollection<Child> children{get; set;} } public class Child { [Key, Column(Order = 0)] pub
public class Parent
{
[Key]
public int ID {get; set;}
public string statecode{get; set;}
public virtual ICollection<Child> children{get; set;}
}
public class Child
{
[Key, Column(Order = 0)]
public string StateFromCode { get; set; }
[Key, Column(Order = 1)]
public string StateToCode { get; set; }
}
公共类父类
{
[关键]
公共int ID{get;set;}
公共字符串状态码{get;set;}
公共虚拟ICollection子项{get;set;}
}
公营儿童
{
[键,列(顺序=0)]
公共字符串StateFromCode{get;set;}
[键,列(顺序=1)]
公共字符串StateToCode{get;set;}
}
我想在dbcontext中指定一个关系,其中子对象被延迟加载到父对象和父对象中。statecode==Child.StateToCode。请注意,StateToCode是子键的一部分,而不是整个主键。如果可能的话,我应该在下面的DB上下文中指定什么来实现这一点
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Parent>().HasMany(x=>x.children)..............
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Conventions.Remove();
modelBuilder.Entity()有许多(x=>x.children)。。。。。。。。。。。。。。
}
这是不可能的,尤其是对于“代码优先”(code first),关系必须遵循与在数据库中指定引用约束完全相同的规则。因此,唯一有效的关系将需要子表中的父项
的Id列以及该列上的外部约束谢谢您的回答。我最终手动将children集合填充为“p.children=dbcontext.children.where(c=>c.StateToCode==p.statecode)”,并将集合从ICollection更改为[NotMapped]IEnumerable。这种情况仍然存在,还是较新版本提供了此功能?