gpt4 book ai didi

MySQL 到 MSSQL 保持外键关系

转载 作者:行者123 更新时间:2023-11-29 12:14:59 25 4
gpt4 key购买 nike

我目前正在尝试从旧的 MySQL (5.0) 迁移到 MSSQL。因为我必须保留主键关系,所以我现在面临一个问题。表中的某些数据以 ID 6102(而不是 1)开头。我可以通过增加种子来解决这个问题,这很有效。现在,在数千个数据集之后,我有了一些飞跃,例如从 id 22569 到 22597。这种情况发生多次。

我目前所做的基本上是,从源数据库(MySQL)中选择所有数据,将它们映射到生成的模型中,并尝试将该模型映射到我的目标模型(MSSQL)。 (我这样做是因为目标新结构与现有结构略有不同。)当我忽略这些跳跃时,我稍后会在其他几个表上遇到外键违规。

所以我目前的解决方案是,从每个映射的开头开始计数,当当前模型的 id 与计数器不同时,手动重置数据库中的种子。

DBCC CHECKIDENT (mytable, RESEED, idFromCurrentModel);

是否有可能强制 Entity Framework 或 SQL Server 接受来 self 的模型的 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="Identity"

在您的身份栏中。就我而言,这看起来像这样:

...
<Property Name="id" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
...

删除此内容后,EF 不再忽略我的设置 ID。

Source

其他信息:

添加此属性

[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

这做得很好。

关于MySQL 到 MSSQL 保持外键关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29971088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com