Присоедините Entity со значением параметра null, используя Entity Framework - PullRequest
0 голосов
/ 03 марта 2019

Итак, я пытаюсь обновить строки, где LOGIN IS NULL и ID = 1. Если строк с этими параметрами нет, добавьте новую строку.Я использую attach, чтобы сделать это в 1-2 запросах, поэтому я пытаюсь сначала избежать SELECT, а затем обновлять.

Проблема в NULL-значении.EF просто игнорирует LOGIN, поскольку он имеет нулевое значение, однако мне нужно найти только строки, в которых LOGIN IS 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 голосов
/ 03 марта 2019

К сожалению, невозможно включить условие WHERE в операторы UPDATE в платформе сущностей, поэтому вам придется выбирать, затем обновлять или вставлять, например:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...