Итак, я пытаюсь обновить строки, где 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