Alex Rivera | Logout

Entity Framework: Issue with IDENTITY_INSERT - "Cannot insert explicit value for identity column in table"

Asked 2012-03-08T18:15:20.690
9

I am using Entity Framework 4.0 with C#.NET. I am trying to create a "simple" migration tool to convert data from one table to another(the tables are NOT the same)

The database is a SQL Server 2005.

I have a target DB structure similar to the following:

MYID - int, primary key, identity specification (yes)
MYData - varchar(50)

In my migration program, I import the DB structure into the edmx. I then manually turn off the StoreGeneratedPattern.

In my migration program, I turn off the identity column as follows(I have verified it does indeed turn it off):

            using (newDB myDB = new newDB())
            {
                //turn off the identity column 
                myDB.ExecuteStoreCommand("SET IDENTITY_INSERT SR_Info ON");
            }

After the above code, I have the following code:

            using (newDB myDB = new newDB())
            {
                DB_Record myNewRecord = new DB_Record();
                //{do a bunch of processing}
                myNewRecord.MYID = 50;
                myDB.AddToNewTable(myNewRecord);
                myDB.SaveChanges();
            }

When it gets to the myDB.SaveChanges(), it generates an exception: "Cannot insert explicit value for identity column in table".

I know the code works fine when I manually goto the SQL Server table and turn off the Identity Specification off.

My preference is to have the migration tool handle turning the Identity Specification on and off rather than have to manually do it on the database. This migration tool will be used on a sandbox database, a dev database, a QA database, and then a production database so fully automated would be nice.

Any ideas for getting this to work right?

I used the following steps:

  1. Create database table with identity column.
  2. In Visual Studio, add a new EDMX.
  3. On EDMX,
Edit
Report

1 Answer

0

This looks promising Using IDENTITY_INSERT with EF4

You basically need to make sure your data model knows about the changes you made to the database, as they are now no longer in sync with the underlying table.

However, I don't recommend using EF as a heavy-weight data load tool. Prefer the SQL or ETL tooling.

answered 2012-03-08T18:47:03.117

Your Answer