首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF核HasData种子的TPH实体

EF核HasData种子的TPH实体
EN

Stack Overflow用户
提问于 2022-04-10 13:33:49
回答 1查看 176关注 0票数 1

我想使用EF核心HasData方法为数据库添加引用数据。我想要种子的两个模型遵循表每个层次结构(TPH)模式,即存在一个非抽象基类型和另一个非抽象派生类型。数据库中的这些模型存在于以基类型命名的具有判别器列的表中。我想为这个表添加数据种子。然而,在EF核心6文档中,我很难找到关于如何这样做的指导方针。

我有几个相关的问题:

我是使用HasData方法在EntityTypeBuilder<BaseType>上创建所有数据,还是需要在该类上将种子拆分为一个HasData,而在EntityTypeBuilder<DerivedType>上将另一个HasData拆分

我理解使用TPH将添加一个阴影鉴别器属性,这可能需要在数据种子中添加该属性。这是否意味着我必须使用匿名类型来指定属性(看起来不太优雅),如果是的话,我是否可以使用方法获得自动生成的鉴别器名称(手动输入它听起来像是风险,如果EF Core更改了鉴别器名称约定怎么办?)

我应该完全避免在参考表上使用TPH吗?我还有别的事要做吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-10 16:00:42

在反复尝试了我的选项之后,我得出了以下解决方案。它可能不是完美的,但它解决了我所有的关切。

我是使用HasData方法在EntityTypeBuilder<BaseType>上创建所有数据,还是需要在该类上将种子分为一个HasData,另一个在EntityTypeBuilder<DerivedType>上?

您必须在两个类上都这样做,否则会在创建迁移时抛出:The seed entity for entity type 'BaseType' cannot be added because the value provided is of a derived type 'DerivedType'. Add the derived seed entities to the corresponding entity type.

我理解使用TPH将添加一个阴影鉴别器属性,这可能需要在数据种子中添加该属性。这是否意味着我必须使用匿名类型来指定属性(看起来不太优雅),如果是的话,我是否可以使用方法获得自动生成的鉴别器名称(手动输入它听起来像是风险,如果EF Core更改了鉴别器名称约定怎么办?)

我已经向BaseType类添加了一个属性,并将其定义为判别器,因此现在我可以直接指定鉴别器值,而无需使用匿名类型,并且可以控制判别器值。格特·阿诺德( Gert )指出,在另一个答案中为什么这样做可能不合适。但是,我使用了下面描述的在这份EF核心杂志上方法来缓解他提出的担忧。

我应该完全避免在参考表上使用TPH吗?我还有别的事要做吗?

这件事仍未得到答复。但我现在更有信心,这是一个很好的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71817091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档