实体框架 - 如何实现标记(用于文章/页面)



我正在编写一个基于 EF 的网站,该网站将有许多Articles(带有 id、作者、日期、标题等属性),每个属性都是Category的成员(10 个可能的类别,每个类别都有 ID、标题、相关图标等)

每篇文章还可以有几个"标签"。就像适用于 SO 问题的问题标签一样。

例如,文章 ID 1 具有:

  • 标题:"2016年最受欢迎的10个婴儿名字",作者:"Jo Bloggs",日期:2017-02-01等
  • 类别 ID:2(Category表的外键,其中 ID 2 是"年度回顾"类别)
  • (这是我不清楚的部分)标签: "列表", ">前10名", "育儿", "2016
  • ", "趋势", "婴儿", "名字"

文章 ID 2("我今年发现的 50 个生活技巧")

  • 有自己的标题、作者等,也是类别 ID 2 的 FK
  • (这是我不清楚的部分)标签: "2016", "列表", ">生活黑客", "自我完善">

从上面有 9 个"不同"标签,其中2016Lists适用于两篇文章,其他标签分别出现一次。

随着大量文章的出现,标签的数量越来越多。

这只是ArticleTag的多对多关系的情况,还是有更自然/惯用的方式来表示使用 EF ?

我想做的主要事情是:

  • 在文章页面上,显示适用于该文章的标签(如查看问题时应用于问题的 Stack Overflow 标签)。
  • 显示"标签云"或标签列表,其中包含已标记为该标签的文章数量。 例如Lists (2)Trends (1)
  • 可能在创建文章时,如果标签尚不存在,则可以创建一个新的标签(尽管如果这太难,我可以预先创建标签)。

不需要:

  • 查询文章以查找标签 = THIS 而不是 THAT或任何类似逻辑的文章
  • 保留标签的顺序(我将在视图/控制器逻辑中对它们进行排序,因此它们的存储顺序无关紧要)

我需要知道的:

  • 我应该如何对数据库中的标签进行建模(应该有一个Tag表和一个ArticleTag表(ArticleIDTagID)还是其他什么?
  • 我需要使用 EF 进行建模以有效地表示article-tag关系?

我的背景是数据库,所以我了解 FK 和链接表等,但在 EF 方面苦苦挣扎。

注意我的要求:这是我为自己创建的网站,所以我已经知道要求。例如,我不会遇到"用户"要求能够保留标签顺序的情况。

你可以添加 2 个表,Tag 和 TagRelation,Tag 负责保存 TagNames 等 #Test #AnotherTest,确保没有办法插入相同的 tagName。 在TagRelations中,你应该保留TagId(标签表的Fk)和Guid(文章的Fk,页面和你的名字)。 在此体系结构中,每个需要标记的表都必须具有 Guid 类型(SQL 数据类型中的唯一标识符)的字段,当您搜索 ex. 文章时,您只需在 Guid 字段上使用 TagRelation 设置内部连接

public class Tag
{
public long Id { get; set; }
public string TagName { get; set; }
}
public class TagRelation
{
public long Id { get; set; }
public long TagId { get; set; }
public Guid FkUniqueGuid { get; set; }
}
public class Article
{
public long Id { get; set; }
public Guid UniqueGuid { get; set; }
//And another fields
}

最新更新