Я хотел бы добавить записи в массив в таблицу с заданным идентификатором, чтобы я мог построить иерархию для отображения записей в режиме древовидной структуры. Я могу отдельно добавлять записи, которые отлично работают, и я не устанавливаю ID. Я хотел бы установить идентификаторы только навалом, поэтому я устанавливаю DatabaseGenerated
Option как None
в столбце id для моего объекта как None
.
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
foreach (ErrorCode ec in errorCodesStep3.errorcodesUsers)
{
errorCode.ID = ec.ID;
errorCode.ParentID = ec.ParentID;
errorCode.ErrorDescription = ec.ErrorDescription;
db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.ErrorCode ON");
db.ErrorCode.Add(errorCode);
db.SaveChanges();
scope.Complete();
}
}
ErrorCode
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
Я получаю сообщение об ошибке:
не может установить идентификатор, когда вставка идентификатора выключена.
Не уверен, что случилось, так как я видел примеры того, что вставка идентификатора может быть включена. Я использую EF Version 4.2.0.0 и Runtime Version v4.0.30319. Я могу легко добавить инструкцию INSERT через executeSQL
с параметризованными переменными, но я хотел бы сделать это с помощью сущности framework. Похоже, что db.Database.ExecuteSqlCommand
находится в отдельной области действия и закрывается сразу и недоступен, когда выполняется db.savechanged
.