【问题标题】:Entity Framework : implemeting very simple association scenario实体框架:实现非常简单的关联场景
【发布时间】:2010-09-11 03:17:10
【问题描述】:

我想在实体框架中实现下面提到的问题。

我有两张表(下面是它们的简化版)

项目表

itemId,itemName

标签表

tagId,tagName
  • 我的逻辑是,一个项目可以有多个标签,一个标签可以有多个与之相关的项目,所以我添加了多对多关系(请在这里纠正我,如果我错了)

  • 我已经从中创建了模型(edmx 文件)和数据库。

  • 我已经编写了将数据添加到示例表的代码,并且工作正常。以下是样本数据

    itemId  itemName  ---items table
       1   |  fish
       2   |  cell phone
    
    tagId    tagName ------tags table
       1   |  eatable
       2   |  electronics
       3   |  non veg
    

我需要知道如何编写这 3 个查询

  1. 添加标签和项目之间的关系,例如将标签“eatables”、“nonveg”添加到项目“fish”
  2. 获取与项目相关的所有标签(例如:鱼)
  3. 获取与项目无关的所有标签(例如:鱼)

【问题讨论】:

  • “eatable”在正确的英语中应该是“edible”。

标签: entity-framework ado.net entity-framework-4


【解决方案1】:

如果您的关联采用正常命名(您问题中的 EDMX 图会有所帮助)...

问 1。

Tag tag = ...  // probably load from database or create if necessary
Item item = ...
item.Tags.Add(tag);

问题 2。

var tags = item.Tags;

Q 3.a 与任何项目无关的所有标签

var unrelatedTags = context.Tags.Where(tag => tag.Items.Count() > 0);

Q 3.b 与特定项目无关的所有标签

var unrelatedTags = context.Tags.Except(item.Tags);

【讨论】:

  • 查询 2 不起作用,在查询 3 中(即对于不相关的标签):我正在寻找与特定项目无关的标签。例如:如果“鱼”我希望它返回“电子产品”作为所有与鱼无关的标签中唯一的标签
  • 为特定项目添加了 3b。那么在 Q2 上什么不起作用?如果 Q2 不适合您,Q1 将如何运作?它们使用相同的 .Tags 属性。
  • 在 q2 中,我正在寻找与某个项目相关的所有标签。如果是鱼,它应该返回可食用和非蔬菜。我找到了方法:item.Tags 没问题,但是在为 item 编写查询时,我们必须包含标签,例如:: var item= _context.items.include("tags").first(i=>i.name="fish "),现在 item.tags 是正确的。我仍在寻找第三个查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多