У меня есть приложение, которое создает объекты в автономном режиме, а затем сохраняет их в базе данных, когда она доступна. Многие объекты могут быть созданы, когда приложение находится в автономном режиме.
Вот базовая версия метода:
public void SaveEntityToDatabase(Entity entity)
{
Context.Entities.AddObject(entity);
Context.SaveChanges();
}
Поскольку эти объекты создаются в автономном режиме, невозможно определить, существуют ли объекты с аналогичными данными. Например, у меня есть поле «SomeText», которое должно быть уникальным для всех записей. Это поле имеет тип «текст» в SQL Server, поэтому вместо того, чтобы пытаться напрямую сравнивать значение, которое я хэширую, и сравнивать значение хэша. Если нет подходящих записей, я добавляю новую сущность, в противном случае я рано выбываю из метода.
Вот базовая версия обновленного метода:
public void SaveEntityToDatabase(Entity entity)
{
var hashedValue = entity.SomeText.ToSHA1();
if (Context.Entities.Where(e => e.SomeTextHash == hashedValue).Count() > 0)
return;
entity.SomeTextHash = hashedValue;
Context.Entities.AddObject(entity);
Context.SaveChanges();
}
К сожалению, при выполнении проверки существования мое приложение выдает исключение:
Cannot insert the value NULL into column 'SomeText'.
Закомментирование проверки устраняет проблему, но не позволяет мне проверять существующие записи.
//if (Context.Entities.Where(e => e.SomeTextHash == hashedValue).Count() > 0)
//return;
Если я вставлю точку останова в SaveChanges и проверим «сущность», если она заполнена полностью. Кажется, что проверка существования делает недействительной «сущность» в графе объектов, но я не достаточно знаком с внутренней работой Entity Framework, чтобы быть уверенным.
Что является причиной этого исключения и как я могу его избежать?