如何使用 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?

在PowerQuery中让用户自定义筛选条件的一种解决办法

将 AddOrUpdate 与 Entity Framework 6 Repository 一起使用的单元测试方法

当查询条件不确定的时候,怎么写SQL 语句

多个空格键条件运算符