问题 在什么情况下我需要实体框架中的外键和导航属性


我的Order课程有:

public int CustomerId { get; set; }

public Customer Customer { get; set; }

我真的需要这两个属性来建立关系吗?

我没有使用断开连接的实体,我使用代码第一种方法。


8630
2018-02-16 22:44


起源

可能重复 代码优先:独立协会与外键协会? - Gert Arnold
@Gert我已经阅读了你链接的文章。我仍然不知道我需要两个。当我有实体引用时,我也应该有外键...所以它只是重复自己...... - Elisabeth
我认为这些信息告诉你并不是绝对需要的 CustomerId 但你最好做(虽然这取决于你)。我还希望将您与问题所依据的术语以及讨论它的一系列来源联系起来。 - Gert Arnold
这是另一个类似的问题: stackoverflow.com/questions/9253234/... - Slauma


答案:


根据Julia Lerman的书: 编程实体框架:DbContext,区别在于更新导航属性的难度。在第85页中,她建议“如果在N层方案中有一件事可以让你的生活更轻松,那就是为模型中的关系公开外键属性。”该书包括两种情景的样本。

原因是包含外键属性告诉实体框架使用外键关联,这比在需要更新关系时使用所谓的独立关联更简单,即在您的示例中将订单从一个客户更改为另一个客户。使用外键关联,您需要做的就是更改CustomerId。如果没有CustomerId外键,则需要更多步骤。独立关联使用解释的ObjectStateManager 代码优先:独立协会与外键协会? ObjectStateManager很复杂,甚至没有从DbContext API公开。


14
2017-11-16 18:44