2015-01-11 21 views
1

所以这我我的情况。插入一个特定的ID到自动增量字段在MySQL与实体框架5

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

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

所以我的问题是:我怎么会通过实体框架5最先使用的数据库中可以插入一个指定ID整数到具有AUTO_INCREMENT的MySQL数据库字段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是自动生成的,并且独立于旧数据库whi通道将确保没有dublicates将occour

+2

在添加新项目之前在表格上设置'IDENTITY_INSERT ON'。 – Aria

+0

@aria如果我记得没错,从我在网上可以找到的'SET IDENTITY_INSERT Profile ON'是一个** MSSQL **特定命令,并且不适用于MySQL ** –

+1

我不熟悉MySql但是我读了某处MySQL可以让你手动将值插入AUTO_INCREMENT列,这已经被允许。 – Aria

回答

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; 
1

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

+1

从网上我可以找到的Identity_Insert是一个** MSSQL **命令,不会与** MySQL ** –

1

我来到了同样的问题,但使用实体框架6,这是我如何解决它:

  1. 进入您的实体模型
  2. 选择每个auto_increment字段并在属性集中StoreGeneratedPattern
相关问题