【问题标题】:How do I add 'Tags' to my simple BlogPost class library & repository?如何将“标签”添加到我的简单博客帖子类库和存储库?
【发布时间】:2011-04-23 04:30:24
【问题描述】:

更新

检查 StackOverflow OData service 与 Posts / PostTags / Tags 完全一样...请问我该如何复制它?


所以我有一个名为 BlogPost 的简单类 - 没什么特别的。只是一篇博文。现在,我想为这个类添加标签。与 StackOverflow 问题的 标签 完全一样 - 5 个字符串,以空格分隔。然后使用 Entity Framework 4 将此数据保存到我的 Sql Server 2008 数据库中。

所以,起初我以为我可以添加 ICollection<string> Tags { get; set; }StringCollection Tags { get; set; }

对于数据库,只需有一个名为 Tags 的新表,它是 BlogPost 的外键和 VarChar(100) Tag 字段。

但后来我想,如果我这样做,我只会在那个数据库表中有很多重复的标签。有没有可能有两张桌子,也许吧。

  • BlogPostsToTags
  • 标签

标签都是唯一的实例。

现在这很容易在 DB 中建模,但我不知道如何在 EF 中执行此操作?这是建模的好方法吗?这就是SO在这里所做的吗?

我真的很喜欢ICollection<string> Tags { get; set; }(它又好又干净),但我不确定如何使用 EF 作为我的数据访问权限,并且在数据库中拥有唯一标签。

我只是不知道如何为博文添加一些标签,并确保标签是唯一的,但仍然引用回博文。

就像,这应该是数据库的责任,所以当我尝试保存博客文章时,那时我是否唯一地处理标签..首先检查它们是否存在,然后插入或更新唯一标签。 . 并在 BlogPostsToTags 表中使用此参考 ID?竞争条件会发生什么?我是否需要为此使用事务...如果需要...如果表被锁定,读取性能如何?

【问题讨论】:

    标签: .net sql-server entity-framework architecture tags


    【解决方案1】:

    听起来你是在正确的轨道上。在您的标签表中,您可能需要考虑使用标签的正确大小写和规范化(全部小写,无标点符号)版本,以便您可以将相似的版本映射到同一个标签(例如 StackOverflow、stackoverflow、stack-overflow)。

    它与您的博客文章之间的多对多关联将为您提供任何条目上的标签集合。

    您可以在 C# 中执行唯一性代码:使用Hashset<Tag> 和各种集合运算符来查找新标签。您可以使用异常处理和针对乐观并发异常的适当重试代码一一添加新标签。在数据库中拥有所有标签后,您可以将所需的任何新关联添加到博客文章并保存这些更改。

    当您想将这些相同的标签应用于许多其他表时,困难的地方是(除非它们都继承自一些公共基础实体表,在这种情况下很容易)。

    【讨论】:

    • 为回复干杯 :) 我从未听说过 Hashset<T> 对象,但我快速搜索了一下,发现它是在 .NET 3.5 中出现的 - 很好 :) 所以是的,这有助于使用独特的标签对于我的 POCO 对象,但我仍然不知道如何在 EF 中执行此操作?尤其是当我可以有一个Tag Entity
    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 2021-04-14
    • 2017-02-24
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多