使用实体框架添加唯一数据
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 个代表,如果可以的话,我会给你们两个赞成票。 :)以上是关于使用实体框架添加唯一数据的主要内容,如果未能解决你的问题,请参考以下文章