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

时间:2015-01-11 13:25:43

标签: c# mysql entity-framework

所以这就是我的情况。

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

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

我的问题是:我如何能够将指定的id 整数插入到 MySQL 数据库中 auto_increment 的字段中通过实体框架5 ,首先在 C#中使用数据库?


这是我的新数据库的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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

这就是我所做的:

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;

答案 2 :(得分:1)

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

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