我正在编写一个应用程序来导出数据并将其序列化为文件以归档旧数据。
在某些情况下,出于某种原因,选择数据可能需要重新导入。由于标识列,这一直给我带来问题。
为了解决这个问题,我在事务范围内执行工作。为该表设置身份插入,然后更新我的事务,例如
using (TR.TransactionScope scope = new TR.TransactionScope(TR.TransactionScopeOption.RequiresNew))
{
// allow transaction nbr to be inserted instead of auto generated
int i = context.ExecuteStoreCommand("SET IDENTITY_INSERT dbo.Transactions ON");
try
{
// check if it already exists before restoring
var matches = context.Transactions.Where(tr => tr.transaction_nbr == t.transaction_nbr);
if (matches.Count() == 0)
{
Transaction original = t;
context.Transactions.AddObject(original);
context.SaveChanges();
restoreCount++;
但我收到一个例外说:
当 IDENTITY_INSERT > 设置为 ON 或复制用户插入 NOT FOR REPLICATION 身份 > 列时,必须为表中的身份列指定显式值。
我假设实体框架正在尝试在不指定列的情况下进行某种块插入。无论如何在实体框架中这样做。
该对象很大,并且有许多关联的实体也被反序列化并需要插入,所以如果可能的话,我想让实体框架这样做,因为它可以为我节省很多额外的工作。
任何帮助表示赞赏。