如果我有非标准的外键名称,我是否需要手动设置关系的两面?

时间:2014-03-12 23:05:43

标签: c# entity-framework fluent-entity-framework

我正在开发一个Database First项目,我正在使用EntityTypeConfiguration类来设置我的模型的Fluent定义(使用"反向工程师代码优先"工具来获取初始类)。

在我的一组课程中,我有一个非标准的关键字n,它将两个对象关联成一对多的关系。这是一组示例。

class Foo
{
    public int FooId {get; set;}
    public string SomeData {get; set;}
    public virtual ICollection<Bar> Bars {get; set;}
}

class Bar
{
    public int BarId {get; set;}
    public int ThisIntPointsToFooId {get; set;}
    public virtual Foo Foo {get; set;}
}

当我创建EntityTypeConfiguration<Foo>EntityTypeConfiguration<Bar>时,我是否需要从两侧定义关系,或者我可以从一方进行,另一方则将其接收?

class FooMap : EntityTypeConfiguration<Foo>
{
    //(Snip other members)

    this.HasMany(t => t.Bars).WithRequired(t => t.Foo).HasForeignKey(t => t.ThisIntPointsToFooId);
}

class BarMap : EntityTypeConfiguration<Bar>
{
    //(Snip other members)

    this.HasRequired(t => t.Foo).WithMany(t => t.Bars).HasForeignKey(t => t.ThisIntPointsToFooId);
}

1 个答案:

答案 0 :(得分:2)

一个映射就足够了 - 在我看来实际上更好。如果你想改变某些东西 - 比如让FK可以为空并且关系可选(HasOptional / WithOptional)或者将WillCascadeOnDelete(false)添加到关系中 - 你不必关心两个映射,但只改变一个地方。