我使用EF CTP 5 Code First。如果您要求EF为此模型生成数据库,它将为您创建适当的外键关系:
public class Parent
{
public ICollection<Child> MyChildren { get; set; }
}
public class Child
{
public Parent MyParent { get; set; }
}
由于这样的生成,子表将具有类似MyParent_Id字段的内容。现在我有反向问题 - 我有一个Db架构,我必须建立类似的简单模型。通过类似的简单我的意思是没有任何明确的外键属性。有办法吗?
我找到的映射的唯一方法就是这样,但它意味着在我试图避免的模型中使用公共属性MyParentId。那怎么避免呢?
public class Child
{
[Column("ParentID")]
public int MyParentId { get; set; }
[ForeignKey("MyParentId")]
public Parent MyParent { get; set; }
}
提前致谢
答案 0 :(得分:2)
一种方法是在代码中定义映射而不是使用属性。在您的“上下文”类(派生自DbContext
的类)中:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Child>()
.HasRequired(c => c.MyParent)
.WithMany()
.Map(c => c.MapKey("MyParent_Id"));
}
在这种情况下,“MyParent_Id”是子表中列的名称,而不是Child
类中任何属性的名称。