在EF6数据库中首先插入标识

时间:2018-04-13 20:56:31

标签: sql-server entity-framework entity-framework-6 ef-database-first identity-insert

我正在尝试将旧数据库中的数据转换为新数据库,其中主键的值很重要。

我目前拥有的代码就是这样(实际的表名替换为" TableName"):

using (var oldContext = new OldContext())
using (var newContext = new NewContext())
using (var transaction = newContext.Database.BeginTransaction())
{
    foreach (var item in GetConversionItems())
    {
        var newItem = Convert(item);
        newContext.TableName.Add(newItem);
    }

    try
    {
        newContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[TableName] ON;");
        newContext.SaveChanges();
        newContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[TableName] OFF");
        transaction.Commit();
    }
    catch (Exception e)
    {
        transaction.Rollback();
    }
}

我明确地为主键指定了一个值。

public static TableName Convert(OldItem oldItem)
{
    ...
    newItem.ID = oldItem.CONTROL;
    ...
}

但我得到了例外:

  

"必须为表中的标识列指定显式值   '表名'当IDENTITY_INSERT设置为ON或者a时   复制用户正在插入NOT FOR REPLICATION标识   。柱"

我已尝试在foreach循环中进行实际的数据库调用(IDENTITY_INSERT和SaveChanges()),但问题仍然存在。

我能为这个问题找到的答案都是代码优先的。

0 个答案:

没有答案