Mapping Codefirst外键名具有重复的表名-如何显式设置?
我有两张桌子: 1) 母公司 2) 孩子 在codefirst中,我有以下定义:Mapping Codefirst外键名具有重复的表名-如何显式设置?,mapping,ef-code-first,entity-framework-4.1,Mapping,Ef Code First,Entity Framework 4.1,我有两张桌子: 1) 母公司 2) 孩子 在codefirst中,我有以下定义: public class Parent { public int ParentId { get; set; } public ICollection<Child> child { get; set; } } 公共类父类 { public int ParentId{get;set;} 公共ICollection子项{get;set;} } 但是,在db中,子表定义了以下外键: par
public class Parent
{
public int ParentId { get; set; }
public ICollection<Child> child { get; set; }
}
公共类父类
{
public int ParentId{get;set;}
公共ICollection子项{get;set;}
}
但是,在db中,子表定义了以下外键:
parentID(FK,int,NULL)
如何确保它只在外键中指定ParentId?是否需要使用fluent配置显式设置父项?是,您必须在子实体中包含外键属性:
public class Child
{
public int ChildId { get; set; }
public int ParentId { get; set; } // FK
public virtual Parent { get; set; }
}
或者必须使用fluent API重命名列:
modelBuilder.Entity<Child>()
.HasRequired(c => c.Parent)
.WithMany(p => p.Childs)
.Map(m => m.MapKey("ParentId"));
modelBuilder.Entity()
.HasRequired(c=>c.Parent)
.WithMany(p=>p.Childs)
.Map(m=>m.MapKey(“ParentId”);
太好了,这很有效!我使用了第一种解决方案。“虚拟”关键字的意义是什么?我还注意到第二个解决方案不起作用,使用WithMany()无法使用Map()方法。我只有HasForeignKey、IsIndependent和WillCascadeOnDelete方法,没有Map()!您没有首先使用EF代码的最新版本。这就是为什么您没有看到Map
,而是看到IsIndependent
。virtual
的原因是启用了父级的延迟加载。