【发布时间】:2017-02-08 19:36:20
【问题描述】:
我正在编写一个基于 EF 的网站,它将有许多 Articles(带有 id、作者、日期、标题等属性),每个都是 Category 的成员(10 个可能的类别,每个类别都有 id、标题, 相关图标等)
每篇文章也可以有多个“标签”。就像应用于 SO 问题的问题标签一样。
例如文章 ID 1 有:
- 标题:“2016 年 10 个最受欢迎的婴儿名字”,作者:“Jo Bloggs”,日期:2017-02-01,等等
-
CategoryID:2(
Category表的外键,其中 ID 2 是“年度回顾”类别) - (这是我不清楚的部分) 标签:“列表”、“前 10 名”、“育儿”、“2016”、“趋势”、“婴儿”、“名字” "
文章 ID 2(“我今年发现的 50 个生活小窍门”)
- 有自己的标题、作者等,也是类别 ID 2 的 FK
- (这是我不清楚的部分) 标签:“2016”、“列表”、“生活小窍门”、“自我提升”
从上面有 9 个“不同”标签,其中 2016 和 Lists 适用于两篇文章,其他标签各出现一次。
随着文章的数量越来越多,标签的数量也越来越多。
这只是Article 到Tag 的多对多关系的情况,还是有一些更自然/惯用的方式来表示使用 EF?
我想做的主要事情是:
- 在文章页面上,显示适用于该文章的标签(如查看问题时适用的 Stack Overflow 标签)。
- 显示“标签云”或标签列表,其中包含已被标记的文章数量。例如
Lists (2),Trends (1) - 可能在创建文章时,如果标签尚不存在,则可以创建一个新标签来配合它(尽管如果这太难了,我可以预先创建标签)。李>
我不需要:
- 查询文章以查找标签 = THIS 而不是 THAT 或任何类似逻辑的文章
- 保留标签的顺序(我将在视图/控制器逻辑中对它们进行排序,因此它们的存储顺序无关紧要)
我需要知道的:
- 我应该如何对数据库中的标签进行建模(应该有
Tag表和ArticleTag表(ArticleID、TagID)还是其他?) - 我需要使用 EF 建模什么来有效地表示
article--tag关系?
我的背景是数据库,所以我了解 FK 和链接表等,但在 EF 方面苦苦挣扎。
关于我的要求的注意事项:这是我为自己创建的网站,所以我已经知道要求。例如,我不会遇到“用户”要求能够保持标签顺序的情况。
【问题讨论】:
-
除非您完全以代码为先,否则只需像往常一样创建数据库,然后使用其中一种数据库优先模式来映射您已构建的模式。否则,您要询问的内容称为“导航属性”,是的,您可以使用连接表。
标签: asp.net-mvc entity-framework navigation tags