繁体   English   中英

使用Entity Framework 5在MySQL中将特定ID插入自动递增字段

[英]Insert a specific id into auto incremented field in MySQL with Entity Framework 5

所以这就是我的情况。

我有一个很老的数据库,我的意思是很多数据。 但是我最终创建了一个新的数据库结构,现在我想将旧数据库中的数据移动到新数据库中。 作为一名程序员,我并不热衷于手动操作,这就是我制作程序的原因。

现在我的问题是:在新数据库中添加新项目时,我无法设置它的id,这对于旧数据库中存在的不同链接引用和一般外键引用至关重要。

因此,我的问题是:如何通过在C#中首先使用数据库的Entity Framework 5 ,将指定的id整数插入到MySQL数据库中具有auto_increment的字段中?


这是我的新数据库的MySQL脚本:

    CREATE TABLE Profile
    (
        _id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
        UNIQUE KEY(_id),
        etc etc
    )


我的插入代码:

    public Profile Add(Profile item)
    {
        if (item == null)
        {
            throw new ArgumentNullException("item");
        }

        db.Entry(item).State = EntityState.Added;
        db.SaveChanges();
        return item;
    }

最后一点我想告诉我,我知道这通常是不好的做法,但是数据库是空的,并且插入的id是自动生成的,并且从旧数据库中是唯一的,这将确保不会出现任何dublicates

您必须关闭身份插入,插入记录然后打开身份插入

解决方案我找到了在插入表之前改变表的位置。 这基本上是其他人给出的解决方案,但是我需要做几次转弯。

这就是我做的:

SET FOREIGN_KEY_CHECKS=0;

ALTER TABLE Profile DROP PRIMARY KEY,
MODIFY _id INT PRIMARY KEY NOT NULL;

insert commmand here....

ALTER TABLE Profile DROP PRIMARY KEY,
MODIFY _id INT AUTO_INCREMENT PRIMARY KEY NOT NULL;

SET FOREIGN_KEY_CHECKS=1;

除了使用Entity Framework 6之外,我遇到了同样的问题,这就是我解决它的方法:

  1. 进入您的实体模型
  2. 选择每个auto_increment字段,并在属性中将StoreGeneratedPattern设置为None

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM