使用实体框架添加唯一数据

Posted

技术标签:

【中文标题】使用实体框架添加唯一数据【英文标题】:Adding unique data with Entity Framework 【发布时间】:2014-04-25 15:17:32 【问题描述】:

我一直在寻找这个问题的答案,但无法真正找到或理解。我在我的 ASP.NET 4.5 C# Web 窗体应用程序中使用实体框架 - 使用代码优先模型。

到目前为止,我只做了一些简单的事情,比如使用对象向数据库添加新数据,但现在我遇到了一个问题。

这就是我到目前为止使用 EF 的方式,正如我在上面所写的,只是立即添加数据。

myContext.myObject.Add(object);
myContext.SaveChanges();

我现在想做的只是添加新数据。我的意思是,例如,如果我有一个包含 10 个对象的列表,并且所有这些对象都已经插入到数据库中,我希望在再次添加相同的列表时忽略它们。但是,如果列表收到了新对象,例如我现在有 10 个之前的对象和 5 个新对象。我希望添加 5 个新的,而我的数据库中已经存在的 10 个被忽略。

到目前为止,我认为这只能以某种方式使用 LINQ 来实现?但是怎么做呢?

非常感谢我能得到的任何帮助!

【问题讨论】:

您使用什么标准来确定什么是“已插入”?唯一的 ID ? Int、Guid 等? 嗨!我的标准是一个名为“title”的字符串/vchar(200) 和一个名为“mainID”的 int 外键。所以对于每个“mainID” - 必须有唯一的“标题”。 如您所料,唯一的方法是通过 LINQ 并查看是否有任何返回 ***.com/questions/9287454/… 谢谢!您链接的线程中的这个答案:***.com/a/9287496/3257261 解决了我的问题,现在一切正常! :) 【参考方案1】:

在添加对象之前,使用 linq 检查对象是否已存在于数据库中

foreach(var obj in customObjects)

  if(!myContext.myObjects.Any(o => string.Equals(o.title, obj.title, StringComparison.OrdinalIgnoreCase)))
  
    myContext.myObject.Add(obj);
  


myContext.SaveChanges();

我建议您在“myObject”上使用 ID 字段并检查它是否为 > 0,而不是在整个数据库中搜索字符串值。

【讨论】:

谢谢!这个答案连同这里给出的答案:***.com/a/9287496/3257261 解决了我的问题!太糟糕了,我还没有 15 个代表,如果可以的话,我会给你们两个赞成票。 :)

以上是关于使用实体框架添加唯一数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架将相关实体添加到数据库

C# 实体框架向来自外部库的实体添加新列

如何在现有远程数据库中添加表并将其链接到实体框架模型?

实体框架:添加迁移失败,无法更新数据库

如何使用实体框架将相同的披萨添加到订单表

在不使用其他项目的情况下添加实体框架核心迁移