经过几次尝试和一些搜索,我终于决定在这里尝试一下。
简短的故事:我已经为内容管理系统应用程序创建了一个相当“规范化”的数据库设计,现在我正试图将它映射到 EF 实体。
我在页面与其内容(ContentVersion 表)之间有 M:N 关系 - 由表 Content 连接。这是因为该应用程序是多语言的,我将存储最近的内容编辑历史。
现在,我可以从我的数据库中创建 DbContext,搭建几个控制器并拥有坚实的基础,但这会有问题。当我尝试创建新页面时,基本上只允许输入标题和标签,但该页面没有内容。我当然可以以某种方式将它与其他实体连接起来,并制作一些分层的业务逻辑,每次都会更新几个实体,但我首先想尝试一种更抽象的方法。
我想我基本上需要实体拆分 3 个相关表。我想创建一个实体(我们称之为 FinalPage),它可以用来将页面作为一个整体工作 -> 用它来搭建控制器等。
FinalPage 是用户在创建新页面时填写的内容,因此它将包含:
Title(来自 Page 实体)
Slug(来自 Page 实体)
TemplateId(来自 Page 实体)
LanguageId(来自 Content 实体)
Title(来自 ContentVersion 实体)
Body(来自 ContentVersion 实体)
+ 来自 ContentVersion 实体的其他相关字段
当我为它生成“创建新”页面时,我会填写所有内容,所有内容都会保存到适当的表格中。
我尝试在我的实体模型中创建新实体,将属性映射到不同的表......尝试了几种方法,但从未得到有效的解决方案。主要是因为典型的“你需要映射每个键”错误。我正在查看Rob Bagby 的这篇文章,但他只连接了两个共享相同密钥的表。
我还尝试了一些感觉非常愚蠢的事情......从页面和内容实体创建实体(entA) - 通过 PageId 属性连接。并从 Content 和 ContentVersion 创建第二个 (entB) - 由 ContentId 连接。然后我想创建第三个(entC)来连接 entA 和 entB。那也没有用(我真的很高兴,因为那将是一个非常奇怪的解决方案)。
我觉得我是:
a.)缺少明显的东西。
b.) 有一个糟糕的数据库设计。
c.) 对英孚的要求太多。
欢迎任何帮助。
- 如果您在数据库设计中看到一些糟糕的东西,请告诉我。
- 如果你知道,如何实现我的目标,请分享。
- 如果您有使用此类应用程序的经验并有更好的解决方案,我想听听。
我基本上也在寻找一些最佳实践。