3

在 EF5 中,使用代码优先方法和流畅的 API,如何根据不是其他表的主键的键创建导航属性(多对 1)?

我的数据库模型就是这样,我无法更改它

  • 表Foo1
    • Foo1ID 整数(键)
    • 字段 1 整数
    • 值 varchar
  • 表Foo2
    • Foo2ID 整数(键)
    • 字段 1 整数
    • 值 varchar
  • 表格栏
    • BarID int(键)
    • 字段 1 整数
    • 值 varchar

我想要我的这些实体:

public class Foo1
{
    public int Foo1ID { get; set; }
    public int BarID { get; set; }    //It corresponds Bar.ID
    public string Value { get; set; }
    public Bar Bar { get; set; }
}

public class Foo2
{
    public int Foo2ID { get; set; }
    public int BarID { get; set; }    //It corresponds to Bar.Field1, NOT Bar.ID
    public string Value { get; set; }
    public Bar Bar { get; set; }
}

public class Bar
{
    public int ID { get; set; }
    public int Field1 { get; set; }
    public string Value { get; set; }
}

这是我的地图(第二张是不完整的):

public  class Foo1Map : EntityTypeConfiguration<Foo1>
{
    public Foo1Map()
    {
        this.HasKey(e => e.Foo1ID);

        // Links to Bar's Primary Key, yay, it's easy.
        this.HasRequired(e => e.Bar).WithMany().HasForeignKey(e => e.BarID);
    }
}

public  class Foo2Map : EntityTypeConfiguration<Foo2>
{
    public Foo2Map()
    {
        this.HasKey(e => e.Foo2ID);

        // No clues of how to links to Bar's other unique column, but not primary key.
        this.HasRequired(e => e.Bar).WithMany()........?
    }
}

public class BarMap : EntityTypeConfiguration<Bar>
{
    public BarMap()
    {
        this.HasKey(e => e.BarID);
    }
}
4

1 回答 1

0

我在问题中提出的情况,在哪里Foo1以及Foo2两者都链接到Bar不同的键(在Bar侧面)不能在 EF5 中完成(帖子中的更多细节几乎是重复的)。但是,如果您的所有对象(Foo1Foo2此处)都需要映射到同一列(具有唯一性约束),即使它不是Bar映射中其他对象(此处)的 PK,您也可以将该列设置为键。此外,如果您不想为Foo1and使用同一列Foo2,但在上下文的同一实例中永远不需要Foo1and Foo2,则可以使用动态映射,但它很危险并且有很多复杂性。

于 2013-03-25T18:51:17.373 回答