gpt4 book ai didi

c# - 使用 Entity Framework 将 MySql 数据转换为 Microsoft Sql

转载 作者:行者123 更新时间:2023-11-29 18:37:20 24 4
gpt4 key购买 nike

我的项目在使用 Entity Framework 时遇到问题。我已经成功建立了这两个数据库之间的连接。我正在考虑实际从数据库复制mysql数据并插入到microsoft sql中。我对这个 Entity Framework 很陌生,这里有人可以指导我如何做到这一点吗?任何帮助将不胜感激。

最佳答案

问题在于 Id 的生成。最简单、最安全的方法是让新的 DbContext 生成 Id,就像元素作为新对象添加一样

唉,这意味着您必须从旧数据库中读取所有元素并将它们添加到新数据库中。

using (var oldDbContext = ...)
{
using (var newDbContext = ...)
{
var oldItems = oldDbContext.OldTable.ToList();
foreach (var oldItem in oldItems)
{
var newItem = converOldItem(newItem);
// you need your Id to have default value (zero)!
var addedNewItem = newDbcontext.NewTable.Add(newItem);
}
...
newDbContext.SaveChanges();
}
}

如果您有一对多关系,您将需要 addedNewItem。例如,如果教师有许多学生,则您的教师在 SaveChanges 之前不会有 TeacherId。因此,您不能将教师的 ID 分配给学生中的外键。你必须:

var newStudentToAdd = ConvertFromOld(oldStudent);
newSturdentToAdd.Teacher = addedTeacher;

这一切的缺点是内存中会有大量数据,并且转换过程会相当慢。优点:非常安全,并且在转换过程中您可以进行(默认)更改。

您可以通过禁用目标数据库中更改的检测来提高速度,从而强制保存所有内容,而不检查数据是否已更改。

因为您正在创建一个新数据库,所以所有数据都被添加,因此所有数据都应该被保存,因此您将不需要更改检测:DbContextConfiguration.AutoDetectChangesEnabled Property

newDbContext.Configuration.AutoDetectChangesEnabled = false;

另一种更危险的方法是重用现有的 ID。如果这样做,您将必须自己为转换过程后将来添加的所有项目生成 id。确保以后ID的生成与旧数据库中ID的生成方法兼容。

如果您决定自己生成 ID。覆盖`DbContext.SaveChanges1:

class NewDbContext : DbContext
{
...
public override int SaveChanges()
{
GenerateIds();
base.SaveChanges();
}

private void GenerateIds()
{
foreach (var addedEntry in this.ChangeTracker.Entries
.Where(entry => entry.State == EntityState.Added))
{
((IID)addedEntity).Id = idGenerator.CreateId();
}
}
}

为此,每个 Entry(DbSet 中具有主键的每个类)都应该有一个指示主键的接口(interface),如下所示:

public interface IID
{
int Id {get; set;}
}

public class Teacher : IID
{
public int Id {get; set;}
...
}
public class Student : IID
{
public int Id {get; set;}
...
}

IdGenerator 应创建与旧数据库的 IdGenerator 类似的 ID。在转换过程中,您想要使用旧数据库的 Id,因此请确保不会重新创建这些 Id

关于c# - 使用 Entity Framework 将 MySql 数据转换为 Microsoft Sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182520/

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