【问题标题】:How to get rid of foreign key property in EF?如何摆脱EF中的外键属性?
【发布时间】:2011-10-17 22:18:44
【问题描述】:

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

提前致谢

【问题讨论】:

  • 自 CTP5 以来发布了 3 个版本,因此您应该立即升级到 Entity Framework 4.1 Update 1
  • 拉迪斯拉夫,好消息。我会更新的。感谢您提供此信息

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


【解决方案1】:

一种方法是在代码中定义映射而不是使用属性。在您的“上下文”类(派生自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 类中任何属性的名称。

【讨论】:

  • 有效!我认为属性可以做同样的事情,但看起来 EF fluent 配置是正确设置关系的唯一方法。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 2015-04-12
  • 1970-01-01
  • 2010-09-09
相关资源
最近更新 更多