为什么Code First类需要导航属性?

Eri*_*ric 5 .net c# entity-framework ef-code-first

我有一些看起来像这样的域类,我想用Code First建模(在EF 4.3中).

public class Foo {
    // ...
}

public class Bar {
    // ...

    public Foo Foo { get; set; }
}

public class Baz {
    // ...

    public Foo Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我看到的每个例子中,在Foo类中添加了外来对象引用.我的Foo班级可以BarBaz班级无关,还是我真的需要做这样的事情?

public class Foo {
    // ...
    public virtual Bar { get; set; }

    public virtual Baz { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

根据这个答案,类需要有导航属性.我是Code First的新手,所以有人可以解释为什么会出现这种情况吗?有没有办法可以Foo通过使用Fluent API 来避免像这样污染我的类?

对我来说,Foo需要了解每个使用它的课程,这似乎很奇怪.我的设计在某种程度上是否存在根本性的缺陷?

mfu*_*ger 1

另一个答案部分正确。

如果您希望 code-forst通过表之间的关系来引导数据库模型,您必须至少在一个类中定义导航属性。

当然,没有关系,映射也可以工作,但是您不会受到数据库/sql 级别的约束。除非您通过迁移或其他一些 sql 脚本添加它们。

尽管在你的例子中我不太确定你想要定义什么样的关系。这应该是一对一的关系吗?

在这种情况下, Foo 不需要知道任何其他对其有引用的类,正如链接问题中所回答的那样,只有一个类需要拥有它。