如何使用 AddOrUpdate 的多个条件来确定数据库是不是应该添加模型或更新?
Posted
技术标签:
【中文标题】如何使用 AddOrUpdate 的多个条件来确定数据库是不是应该添加模型或更新?【英文标题】:How to use multiple conditions with AddOrUpdate to determine if the db should add the model or update?如何使用 AddOrUpdate 的多个条件来确定数据库是否应该添加模型或更新? 【发布时间】:2015-08-15 00:56:22 【问题描述】:所以我想做的是添加或更新用户,具体取决于该用户是否已存在于我的种子方法中。
我希望条件是具有名字和姓氏的用户已经存在但添加 && 似乎不起作用。
foreach (User user in users)
context.users.AddOrUpdate(r => r.FirstName *&& r => r.LastName*, user);
context.SaveChanges();
还有其他方法吗?
【问题讨论】:
【参考方案1】:因为您需要将属性聚合到一个对象(比如说string
-- varchar
:))
.AddOrUpdate(r => r.FirstName + r.LastName);
编辑: 我没试过,但我希望它会被翻译成类似的东西
UPDATE a SET a.* = #b.* FROM #b INNER JOIN a ON
a.FirstName + a.LastName = #b.FirstName + #b.LastName;
INSERT INTO a (*) VALUES (*) LEFT JOIN #b ON
a.FirstName + a.LastName = #b.FirstName + #b.LastName where a.* = null;
所以是的,有连接,但为什么不呢(顺便说一句,查询可能是错误的,我是从记忆中写的) 或带有一些令牌,因此您在输入“JonS now”时不会更新“Jon Snow”
.AddOrUpdate(r => r.FirstName + "#:)" + r.LastName);
别忘了添加索引;)
【讨论】:
感谢您的回复,但这不起作用,因为这只是连接两个不同的属性,我需要分别比较每个属性。 是的,where a.FirstName = #b.FirstName && a.LastName = #b.LastName
会好得多,但我不确定 EF 是否知道这一点...希望另一个答案 :)【参考方案2】:
只要解决这个问题。所以我想分享我的代码。使用“匿名类型”来解决这个问题。
foreach (User user in users)
context.users.AddOrUpdate(r => new r.FirstName , r.LastName , user);
【讨论】:
以上是关于如何使用 AddOrUpdate 的多个条件来确定数据库是不是应该添加模型或更新?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 EF 4.3 中使用带有复杂键的 AddOrUpdate 播种数据
如何在 Entity Framework 4.4 中实现 DBSet.AddOrUpdate?