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

时间:2017-02-07 18:47:15

标签: asp.net-mvc entity-framework navigation tags

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

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

例如,文章ID 1具有:

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

文章ID 2("我今年发现的50次生活黑客")

  • 有自己的标题,作者等,也是类别ID 2的FK
  • (这是我不清楚的部分)标签:" 2016","列表"," Life Hacks"," Self improvement"

从上面可以看到9' distinct' 2016Lists适用于这两个文章的标签,其他标签每个都会显示一次。

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

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

我想做的主要事情是:

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

需要:

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

我需要知道的事情:

  • 我应该如何为数据库中的标签建模(如果有Tag表和ArticleTag表(ArticleIDTagID)或其他什么?)< / LI>
  • 使用EF建模以有效地表示article - tag关系需要做什么?

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

请注意我的要求:这是我为自己创建的网站,所以我已经了解了这些要求。我不会遇到用户&#34;用户&#34;要求能够保持标签的顺序,例如。

1 个答案:

答案 0 :(得分:2)

您可以添加2个Tables,Tag和TagRelation,Tag负责保存TagNames,例如#Test #AnotherTest,确保无法插入相同的tagName。 在TagRelation中,你应该保留TagId(标签表的Fk)和Guid(文章的Fk,页面,你的名字)。 在此体系结构中,每个需要Tag的表都必须在搜索ex时具有Guid类型的字段(SQL数据类型中的uniqueidentifier)。您只需在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
}