簡體   English   中英

MySQL與MSSQL保持外鍵關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM