![](/img/trans.png)
[英]Entity Framework: Cannot insert explicit value for identity column in table '[table]' when IDENTITY_INSERT is set to OFF
[英]Entity Framework: Issue with IDENTITY_INSERT - “Cannot insert explicit value for identity column in table”
我正在使用帶有C#.NET的Entity Framework 4.0。 我正在嘗試創建一個“簡單”的遷移工具,將數據從一個表轉換為另一個表(表格不一樣)
該數據庫是SQL Server 2005。
我有一個類似於以下目標DB結構:
MYID - int, primary key, identity specification (yes)
MYData - varchar(50)
在我的遷移程序中,我將DB結構導入edmx。 然后我手動關閉StoreGeneratedPattern。
在我的遷移程序中,我按如下方式關閉標識列(我已經確認它確實將其關閉):
using (newDB myDB = new newDB())
{
//turn off the identity column
myDB.ExecuteStoreCommand("SET IDENTITY_INSERT SR_Info ON");
}
在上面的代碼之后,我有以下代碼:
using (newDB myDB = new newDB())
{
DB_Record myNewRecord = new DB_Record();
//{do a bunch of processing}
myNewRecord.MYID = 50;
myDB.AddToNewTable(myNewRecord);
myDB.SaveChanges();
}
當它到達myDB.SaveChanges()時,它會生成一個異常:“無法為表中的標識列插入顯式值”。
我知道當我手動轉到SQL Server表並關閉身份規范時,代碼工作正常。
我的偏好是讓遷移工具處理打開和關閉身份規范,而不必在數據庫上手動執行。 此遷移工具將用於沙箱數據庫,開發人員數據庫,QA數據庫,然后是生產數據庫,因此完全自動化將很好。
讓這個工作正常的任何想法?
我使用了以下步驟:
此時,當我添加一個設置了MYID的新記錄時,DB會使用Identity值覆蓋MYID的值。
到目前為止,無論我在哪里添加“myDB.ExecuteStoreCommand(”SET IDENTITY_INSERT SR_Info ON“);”,它的行為都是一樣的。
我試過添加一個存儲過程,它也無法正常工作。
我懷疑最終,遷移不會完全自動化。
當列是標識時,從實體框架插入記錄將引發以下錯誤:
當IDENTITY_INSERT設置為OFF時,無法在表'MY_ENTITY'中為標識列插入顯式值。 避免錯誤設置實體屬性StoreGeneratedPattern =“Identity”
<EntityType Name="MY_ENTITY">
<Key>
<PropertyRef Name="UserID" />
</Key>
<Property Name="RecordID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
</EntityType>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<EntityClass>().HasKey(p => p.Id);
modelBuilder.Entity<EntityClass>()
.Property(c => c.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
base.OnModelCreating(modelBuilder);
}
這看起來很有希望使用IDENTITY_INSERT和EF4
您基本上需要確保您的數據模型知道您對數據庫所做的更改,因為它們現在不再與基礎表同步。
但是,我不建議使用EF作為重量級數據加載工具。 首選SQL或ETL工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.