如何摆脱EF中的外键属性?

时间:2011-08-02 03:31:25

标签: entity-framework ef-code-first code-first entity-framework-ctp5

我使用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; }
}  

提前致谢

1 个答案:

答案 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类中任何属性的名称。