c# - 实体框架 - 显式映射的 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; }
}
好吧,在这种情况下,没有人会在他们的头脑中建立一对一的关系。这不是这里的问题......
您会注意到,对于每个导航属性 (Author
和Post
),都分别定义了明确的 Id 列 (AuthorId
和PostId
)。
我个人不喜欢这种方法(尽管我可以看到一些潜在的好处)。我希望 EF 在内部为我管理 Id 列,让我公开和之间的Post
关系Author
。
我想知道的是,是否有任何官方建议支持或反对明确的 Id 列?
注意:我确实知道显式 Id 映射很有价值的地方,那就是当您实现多对多连接表时。您可以使用 Id 创建唯一约束,以防止相同多对多关系的记录重复。
解决方案
我想知道的是,是否有任何官方建议支持或反对明确的 Id 列?
是的:
建议在模型中包含映射到数据库中外键的属性。通过包含外键属性,您可以通过修改依赖对象的外键值来创建或更改关系。这种关联称为外键关联。在使用 N 层应用程序时,使用外键甚至更为重要。
推荐阅读
- java - 如何解析所需的位置 sample.fxml
- c - 确定给定用户内存大小和偏移量的所有可能的 32KB 块数
- mysql - 我的 NodeJS+ Express + MySQL 应用程序没有在 Openshift 上运行
- rust - 在 Rust 中使用未知键访问 json 对象。有没有更简单的方法?
- python - Python 中的全局和局部范围变量;从循环内的数组中删除项目
- python - .bash_profile 和终端
- c++ - 删除字符串中具有相同值的任何“对”相邻字母
- java - 在一个类中 A ob = new B() 的含义是什么
- mysql - 分组方式不返回空值
- tcl - Tcl Eval ,但我不确定