EF:我应该在我的实体中包括外键ID吗?

代理技术

我知道使用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; }
}
扎卡里·克尼贝尔(Zachary Kniebel)

恕我直言,在某些情况下,最好避免包含外键,前提是您已经拥有virtual该键所引用实体,并且您没有延迟加载。如果已经具有这些属性,那么外键只是可以从virtual实体本身获取的冗余数据

归根结底,外键是用来将您链接到其他实体的,正如您所说,外键更多地是数据库构造。作为开发人员,您知道外键链接到virtual实体中的哪一列,并且可以相应地访问该属性,因此从POCO实体中排除外键并不能消除您对该数据的访问。

以@HiperiX的观点(在他的评论中),消除外键本身将因此消除您的延迟加载能力。如果您要使用确定是否要获取引用实体的键进行某种逻辑处理,那么包括外键将是一个好主意。我更新了帖子的措辞以反映这一警告。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在REST API中,要获取资源,我应该在URL中包括资源ID吗?

来自分类Dev

我应该在PostgreSQL 9.3中使用hash还是btree作为外键索引吗?

来自分类Dev

我应该在其中包括基本标签吗?

来自分类Dev

我应该在Django中使用通用外键吗?如何使用?

来自分类Dev

我应该在.gitingore文件中包括.vs文件夹吗?

来自分类Dev

我应该在HABTM表中包括其他字段吗?

来自分类Dev

DDD。我应该在存储库中修改实体吗?

来自分类Dev

DDD。我应该在存储库中修改实体吗?

来自分类Dev

我应该使用“自然ID”创建实体还是应该在每个实体中始终使用Long作为ID

来自分类Dev

我应该在Java HashMap中为String键覆盖equals()和hashCode()吗?

来自分类Dev

我应该在标签上放置用户ID吗?

来自分类Dev

我应该在模型中抛出HttpStatus异常吗?

来自分类Dev

我应该在交易中包含SELECT吗?

来自分类Dev

我应该在表示层中抛出异常吗?

来自分类Dev

我应该在onDestroyView中删除OnClickListener吗?

来自分类Dev

我应该在virtualenv中安装python 3吗?

来自分类Dev

我应该在C ++的类中存储引用吗?

来自分类Dev

我应该在Rust中返回等待吗?

来自分类Dev

我应该在C ++中删除静态对象吗

来自分类Dev

我应该在virtualenv中安装python 3吗?

来自分类Dev

我应该在系统中杀死僵尸进程吗?

来自分类Dev

我应该在onDestroyView中删除OnClickListener吗?

来自分类Dev

我应该在备份中包含/ dev吗?

来自分类Dev

我应该在Java中嵌套这些类吗?

来自分类Dev

我应该在我的数据库中存储其他实体的用户特定信息吗?

来自分类Dev

即使表中没有页脚,我们也应该在表中包括表脚元素吗?

来自分类Dev

Phonegap-我应该在git存储库中包括JS供应商文件吗?

来自分类Dev

Phonegap-我应该在git存储库中包括JS供应商文件吗?

来自分类Dev

我应该在我的网站中包括哪个jQuery库?

Related 相关文章

  1. 1

    在REST API中,要获取资源,我应该在URL中包括资源ID吗?

  2. 2

    我应该在PostgreSQL 9.3中使用hash还是btree作为外键索引吗?

  3. 3

    我应该在其中包括基本标签吗?

  4. 4

    我应该在Django中使用通用外键吗?如何使用?

  5. 5

    我应该在.gitingore文件中包括.vs文件夹吗?

  6. 6

    我应该在HABTM表中包括其他字段吗?

  7. 7

    DDD。我应该在存储库中修改实体吗?

  8. 8

    DDD。我应该在存储库中修改实体吗?

  9. 9

    我应该使用“自然ID”创建实体还是应该在每个实体中始终使用Long作为ID

  10. 10

    我应该在Java HashMap中为String键覆盖equals()和hashCode()吗?

  11. 11

    我应该在标签上放置用户ID吗?

  12. 12

    我应该在模型中抛出HttpStatus异常吗?

  13. 13

    我应该在交易中包含SELECT吗?

  14. 14

    我应该在表示层中抛出异常吗?

  15. 15

    我应该在onDestroyView中删除OnClickListener吗?

  16. 16

    我应该在virtualenv中安装python 3吗?

  17. 17

    我应该在C ++的类中存储引用吗?

  18. 18

    我应该在Rust中返回等待吗?

  19. 19

    我应该在C ++中删除静态对象吗

  20. 20

    我应该在virtualenv中安装python 3吗?

  21. 21

    我应该在系统中杀死僵尸进程吗?

  22. 22

    我应该在onDestroyView中删除OnClickListener吗?

  23. 23

    我应该在备份中包含/ dev吗?

  24. 24

    我应该在Java中嵌套这些类吗?

  25. 25

    我应该在我的数据库中存储其他实体的用户特定信息吗?

  26. 26

    即使表中没有页脚,我们也应该在表中包括表脚元素吗?

  27. 27

    Phonegap-我应该在git存储库中包括JS供应商文件吗?

  28. 28

    Phonegap-我应该在git存储库中包括JS供应商文件吗?

  29. 29

    我应该在我的网站中包括哪个jQuery库?

热门标签

归档