我经常使用实体框架,但我有一个困惑,我想更好地理解。
如果我想在一个实体中拥有一个导航属性,比如
public virtual ExampleObject Example {get;set;}拥有Id属性也是已完成的事情。
public int ExampleId {get;set;}我的理由是,这会创建一个FK,但如果我忽略它,功能是相同的,而且FK似乎无论如何都是创建的。那么,是否有理由需要额外的字段?
发布于 2014-06-24 23:05:21
我从未使用过实体框架,也不熟悉它的实现细节,但通常ORMs不会将外键解析为对象,除非明确指示它们这样做,或者用户尝试访问这些对象。这是有意义的--填充Example属性比填充ExampleId要广泛得多,因为ID是包含实体的表的列,但是对于完整的ExampleObject,您需要查询另一个表。
虽然ExampleId似乎只对解析完整的ExampleObject很有用,但在某些情况下您只需要ID。例如,如果Student有带有CourseId外键的Course,而Assignment也有Course和CourseId外键,那么您可能需要直接使用Student's CourseId d12获得所有Assignments,并使用相同的CourseId。为此您不需要完整的Course对象。
https://softwareengineering.stackexchange.com/questions/245993
复制相似问题