我知道使用EF约定并没有明确要求,但是在现实世界中,我发现能够简单地更新实体外键而不是附加相关的相关实体非常有用。我的感觉是最好同时提供两个选项,以便可以在给定的使用上下文中使用这两个选项,但是感觉就像我在用属性而不是OO构造来污染我的POCO一样。
非常感谢Pro的想法。
没有外键
public class ProductGroup
{
public int ProductGroupID { get; set; }
public string Name { get; set; }
//Navigation Properties
public virtual System_ProductGroup System_ProductGroup { get; set; }
public virtual ICollection<ProductSubGroup> ProductSubGroups { get; set; }
public virtual ProductSection ProductSection { get; set; }
public virtual ICollection<GeneralTranslation> GeneralDescriptionTranslations { get; set; }
}
带外键
public class ProductGroup
{
public int ProductGroupID { get; set; }
public string Name { get; set; }
//Foreign Keys
public int System_ProductGroupID { get; set; }
public int ProductSectionID { get; set; }
//Navigation Properties
public virtual System_ProductGroup System_ProductGroup { get; set; }
public virtual ICollection<ProductSubGroup> ProductSubGroups { get; set; }
public virtual ProductSection ProductSection { get; set; }
public virtual ICollection<GeneralTranslation> GeneralDescriptionTranslations { get; set; }
}
恕我直言,在某些情况下,最好避免包含外键,前提是您已经拥有virtual
该键所引用的实体,并且您没有延迟加载。如果已经具有这些属性,那么外键只是可以从virtual
实体本身获取的冗余数据。
归根结底,外键是用来将您链接到其他实体的,正如您所说,外键更多地是数据库构造。作为开发人员,您知道外键链接到virtual
实体中的哪一列,并且可以相应地访问该属性,因此从POCO实体中排除外键并不能消除您对该数据的访问。
以@HiperiX的观点(在他的评论中),消除外键本身将因此消除您的延迟加载能力。如果您要使用确定是否要获取引用实体的键进行某种逻辑处理,那么包括外键将是一个好主意。我更新了帖子的措辞以反映这一警告。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句