[英]MySQL to MSSQL keep foreign key relationships
我目前正在嘗試從舊的MySQL(5.0)遷移到MSSQL。 因為我必須保持主鍵關系,所以我現在面臨一個問題。 表中的某些數據以ID 6102開頭而不是一個。 我可以通過增加種子來解決此問題,這是可行的。 現在,經過幾千個數據集之后,我有了一些飛躍,例如從id 22569到22597。這多次發生。
目前,我基本上要做的是從源數據庫(MySQL)中選擇所有數據,將它們映射到生成的模型中,然后嘗試將此模型映射到我的目標模型(MSSQL)。 (之所以這樣做,是因為目標的新結構與現有的結構有所不同。)當我忽略這些飛躍時,稍后在其他幾張表上都會出現外鍵沖突。
因此,我目前的解決方案是,從頭開始計算每個映射,並在當前模型的ID與計數器不同時手動重置數據庫中的種子。
DBCC CHECKIDENT (mytable, RESEED, idFromCurrentModel);
是否有可能分別迫使實體框架和SQL Server從我的模型接受ID,而不是忽略它並使用ident值?
感謝您的閱讀和問候
編輯
就像有人想知道我如何解決這個問題一樣,這里是:
var context = new TestEntities();
// map mysql data to mssql model and convert data
// let's assume I did this
var mapped = new List<Test>()
{
new Test() {id= 42, bar = "foo", created = DateTime.Now},
new Test() {id= 1337, bar = "bar", created = DateTime.Now}
};
var transaction = context.Database.BeginTransaction();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [SeedingTest].[dbo].[Test] ON");
context.Test.AddRange(mapped);
context.SaveChanges();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [SeedingTest].[dbo].[Test] OFF");
transaction.Commit();
context.Dispose();
這僅在我這樣做時有效:
右鍵點擊我的* .edmx文件,打開並刪除
StoreGeneratedPattern = “身份”
在您的身份列中。 就我而言,這看起來像這樣:
...
<Property Name="id" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
...
刪除此選項后,EF不再忽略我的設置ID。
附加信息:
添加此屬性
[DatabaseGenerated(DatabaseGeneratedOption.None)]
到我在生成的模型中的ID, 無效 。
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int foo { get; set; }
public string bar { get; set; }
...
最簡單的方法是將種子初始設置為當前的最大Id值+1。然后,在插入轉換后的行時,執行以下操作
set identity_insert on tablename -- stops generation of IDENTITY, requires user to supply it
insert into tablename values (Id....) -- supply value of Id
set identity_insert_off tablename -- turn inedtity generation back on
這做得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.