使用实体框架将实体的参数值附加为空

时间:2019-03-03 07:25:31

标签: c# sql entity-framework

因此,我正在尝试更新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

1 个答案:

答案 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();
}