【问题标题】:Comma-separated foreign keys using Entity Framework使用实体框架的逗号分隔外键
【发布时间】:2014-07-11 10:51:12
【问题描述】:

我在实体框架中使用代码优先方法。

我正在使用两个类:ItemTag。一个Item可以有多个Tags

public class Item
{
    public int ItemId { get; set; }
    public string Name { get; set; }
    public List<Tag> Tags { get; set; }
}

public class Tag    
{
    public int TagId { get; set; }
    public int Name { get; set; }
    public Item Item { get; set; }
}

我想将TagId 放在Items 表中作为逗号分隔值。

我可以使用外键关联来实现这一点吗?如果是这样,我如何在使用时检索数据?或者请指定替代方法。

【问题讨论】:

  • 检查this link是否有帮助
  • 请,请,不要那样做!!天哪,程序员什么时候才能停止这种疯狂......你有一个很好的 FK 关系 - TagItem 有连接 - 只需使用它!不要将正确的 FK 关系拆分为逗号分隔的字符串 - 下次您想加入时必须再次“取消拆分”......请认真:不要这样做!
  • @marc_s 你能解释一下吗?
  • 你需要解释一下 - 到底为什么你想把你所有的 FK 值分解成一个逗号分隔的字符串吗?数据库中的每个Tag 都有一个ItemID 列,该列通过proper 外键关系将其链接到Item.ItemID 值; .NET 运行时中的每个 Tag 都有一个关联的 Item 所属;每个Item 都有一个与之关联的Tags 列表——你需要另一个逗号分隔的列来做什么?有什么意义??
  • 我有大约 5000 个项目,每个项目都有大约 3-6 个标签,所以你说我在一个表中放置大约 5000 * 6 = 30000 行来关联,项目的数量也可能会增加.如果我需要基于标签进行搜索,这不会导致所有重复标签的记忆丢失吗?

标签: c# entity-framework ef-code-first foreign-keys


【解决方案1】:

您可以将其公开为未映射的属性,即:

public class Item
{
  public int ItemId { get; set; }
  public string Name { get; set; }
  public List<Tag> Tags { get; set; }
  [NotMapped]
  public string TagIds
  {
    set
    {
      if (Tags == null) return null;
      return string.Join(",", Tags.Select(t => t.TagId.ToString).ToArray());
    }
    //get
    //{
       // If you need you can implement this with string.Split and update the Tags
    //}
  }
}

不知道你是否需要实现get。如果这样做,您可以使用string.Split()int.Parse() 获取新的标签ID,并在数据库中更新它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多