0

假设我有一个包含许多不同对象的对象模型,然后使用实体框架映射到数据库表。这一切都很好。问题是当我想将更多对象保存到数据库时会发生什么。模型中的对象是相互关联的,因此当我将对象保存到数据库时,它们可能会引用数据库中已经存在的对象。

例如,如果我有一个名为的对象Person,它有一个属性Friends这本身就是一个人的名单。这意味着数据库中有一个 Persons 表,每个人都有一个由他们的 ID 标识的朋友列表。假设如果两个人的 ID 相同,那么他们就是同一个人,那么我相信如果我再次尝试添加它们,Entity Framework 会抛出错误。所以问题是当我添加另一个已经有朋友列表的人对象时,我想添加不在数据库中的朋友,我不想添加已经在数据库中的朋友。此外,这些人中的每一个都可能有/不在数据库中的朋友,我也希望他们考虑。要考虑的另一件事是,即使该人已经在数据库中,我也想查看他们的朋友列表并添加任何新朋友。

我觉得在使用数据库时这应该是一个相当普遍的问题,但我可能使用了错误的词汇,因为在我的所有搜索中实际上都没有出现任何有用的内容。它主要涉及如何在事后或类似情况下扫描数据库中的重复项。我希望通过实体框架批准的场所在业务逻辑 C# 代码层中处理此问题。任何帮助表示赞赏。先感谢您。

4

1 回答 1

1

Dictionary您提出的问题是有效的,但它与将对象添加到 a或 a没有根本区别HashSet。您只需检查某个Person或相关Friend是否已包含在Databasetable 中,Dictionary或者您是否将要包含在 Databasetable 中。使用实体框架的美妙之处在于它使这些操作非常相似。

因此,您可以使用任何一种方法,例如context.People.Contains(newPerson)(您必须实现IEquatable<Person> for that), orcontext.People.Find(id)。

同样,您可以使用

   foreach(friend in newPerson.Friends)
   {
    if(!context.People.Contains(friend)
      context.People.Add(friend)
  }
于 2012-07-26T19:37:31.257 回答