【发布时间】:2021-04-28 17:18:09
【问题描述】:
在我的项目中,我使用 EF Core fluent 配置,代码优先。我阅读了一些关于owned types 的信息,但下面的情况对我来说并不是很清楚:
假设我有一个Project 实体和一个ProjectType。
我应该将该属性映射为:
Entity<Project>.HasOne<ProjectType>(); 或者更确切地说是Entity<Project>.OwnsOne<ProjectType>();
ProjectType 实体应映射到表 ProjectType(ProjectTypeId, Name, Description)
据我所知,拥有的是
" 只能出现在其他导航属性中的类型 实体类型。这些被称为拥有的实体类型。实体 包含拥有的实体类型是它的所有者。拥有的实体是 本质上是所有者的一部分,没有它就无法存在”
就我而言
“ProjectType 只能出现在Project 实体类型的导航属性上。ProjectType 本质上是Project 的一部分,没有它就无法存在”... 然而,为了创建一个单独的表,据我了解,我需要使用HasOne,而不是OwnsOne...如果有人更好地解释这个想法,那就太好了。非常感谢。
【问题讨论】:
-
我相信前者会创建一个单独的表,而后者不会。
-
@bolkay 查看我的 OP 更新;看来,我的 ProjectType 是 MS 定义所拥有的类型,但它似乎不应该在代码中使用它......
-
查看生成的数据库结构。然后想想如果您想更改项目类型的名称并让所有所属项目立即反映此更改会发生什么。
-
@GertArnold 我没有发现问题。所有项目都使用项目类型的
Id,而不是名称,作为参考。 -
当项目类型为自有类型时,其名称在项目表中。
标签: c# entity-framework entity-framework-core .net-5 ef-core-5.0