将特定 ID 插入 MySQL 中的自动递增字段,其中 Entity Framework 5
Insert a specific id into auto incremented field in MySQL with Entity Framework 5
这就是我的情况。
我有一个旧数据库,里面有很多,我的意思是很多数据。但是我最终创建了一个新的数据库结构,现在我想将数据从旧数据库移动到新数据库中。作为一名程序员,我不热衷于手动执行此操作,这就是为什么我编写了一个程序来执行此操作。
现在我的问题是:将新项目添加到新数据库时,我无法设置它的 ID,这对于不同的 link 引用和存在于数据库中的一般外键引用至关重要旧数据库。
因此我的问题是:我如何才能将 指定的 id 整数插入具有 auto_increment[=38= 的字段中] 在我的 MySQL 数据库中通过 Entity Framework 5 首先在 C#[=38 中使用数据库=]?
这是我的 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 是自动生成的,并且与旧数据库不同,这将确保不会发生重复
您必须关闭标识插入,插入记录,然后再打开标识插入
我找到了在插入 table 之前在哪里更改的解决方案。基本上都是别人给出的解决方案,但是我需要转几圈。
这是我所做的:
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 我遇到了同样的问题,我是这样解决的:
- 进入实体模型
- Select 每个 auto_increment 字段并在属性中将 StoreGeneratedPattern 设置为 None
这就是我的情况。
我有一个旧数据库,里面有很多,我的意思是很多数据。但是我最终创建了一个新的数据库结构,现在我想将数据从旧数据库移动到新数据库中。作为一名程序员,我不热衷于手动执行此操作,这就是为什么我编写了一个程序来执行此操作。
现在我的问题是:将新项目添加到新数据库时,我无法设置它的 ID,这对于不同的 link 引用和存在于数据库中的一般外键引用至关重要旧数据库。
因此我的问题是:我如何才能将 指定的 id 整数插入具有 auto_increment[=38= 的字段中] 在我的 MySQL 数据库中通过 Entity Framework 5 首先在 C#[=38 中使用数据库=]?
这是我的 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 是自动生成的,并且与旧数据库不同,这将确保不会发生重复
您必须关闭标识插入,插入记录,然后再打开标识插入
我找到了在插入 table 之前在哪里更改的解决方案。基本上都是别人给出的解决方案,但是我需要转几圈。
这是我所做的:
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 我遇到了同样的问题,我是这样解决的:
- 进入实体模型
- Select 每个 auto_increment 字段并在属性中将 StoreGeneratedPattern 设置为 None