Mapping 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

我有两张桌子: 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中,子表定义了以下外键:

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
的原因是启用了父级
的延迟加载。