【问题标题】:Attach Entity with parameter value null using Entity Framework使用实体框架附加参数值为 null 的实体
【发布时间】:2019-03-03 07:25:30
【问题描述】:

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

【问题讨论】:

    标签: c# sql entity-framework


    【解决方案1】:

    不幸的是,实体框架中的 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      相关资源
      最近更新 更多