因此,我正在尝试更新LOGIN为NULL且ID = 1的行。如果没有包含这些参数的行,则添加新行。我使用Attach在1-2个查询中进行查询,因此我尝试先避免SELECT,然后再进行更新。
NULL值问题。 EF只是忽略LOGIN,因为它具有空值,但是我只需要查找LOGIN为NULL的行。我可以在没有其他SELECT查询的情况下解决该问题吗?
我的代码:
using (var db = new EntityContext())
{
var ent = new Entity { ID = 1, LOGIN = null };
db.Entities.Attach(ent);
ent.LOGIN = "Whatever";
ent.EMAIL = "Whatever";
int count = db.SaveChanges();
if (count == 0)
{
var clone_ent = new Entity { LOGIN = "Whatever", PASS = "Whatever" };
db.Entities.Add(clone_ent);
db.SaveChanges();
}
}
SQL模拟:
UPDATE Entities SET LOGIN = @LOGIN, EMAIL = @EMAIL
WHERE ID = 1 AND LOGIN IS NULL
IF @@ROWCOUNT = 0
INSERT INTO Entities (LOGIN, EMAIL)
VALUES @LOGIN, @EMAIL
答案 0 :(得分:0)
不幸的是,无法在实体框架的UPDATE语句中包含WHERE条件,因此您必须先选择然后更新或插入,例如:
using (var db = new EntityContext())
{
var ent = db.Entities.Where(x => x.ID == 1 && x.LOGIN == null).FirstOrDefault();
if (ent != null)
{
ent.LOGIN = "Whatever";
ent.EMAIL = "Whatever";
}
else
{
db.Entities.Add(ent);
}
db.SaveChanges();
}