首页 > 解决方案 > 实体框架 - 显式映射的 ID 列

问题描述

考虑以下实体之间的关系:

class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Text { get; set; }
    public int AuthorId { get; set; }
    public Author Author { get; set; }
}

class Author
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int PostId { get; set; }
    public Post Post { get; set; }
}

好吧,在这种情况下,没有人会在他们的头脑中建立一对一的关系。这不是这里的问题......

您会注意到,对于每个导航属性 (AuthorPost),都分别定义了明确的 Id 列 (AuthorIdPostId)。

我个人不喜欢这种方法(尽管我可以看到一些潜在的好处)。我希望 EF 在内部为我管理 Id 列,让我公开和之间的Post关系Author

我想知道的是,是否有任何官方建议支持或反对明确的 Id 列?

注意:我确实知道显式 Id 映射很有价值的地方,那就是当您实现多对多连接表时。您可以使用 Id 创建唯一约束,以防止相同多对多关系的记录重复。

标签: c#entity-framework

解决方案


我想知道的是,是否有任何官方建议支持或反对明确的 Id 列?

是的:

建议在模型中包含映射到数据库中外键的属性。通过包含外键属性,您可以通过修改依赖对象的外键值来创建或更改关系。这种关联称为外键关联。在使用 N 层应用程序时,使用外键甚至更为重要。

实体框架关系和导航属性


推荐阅读