entity framework中自增主键问题
当实体类中有int类型的字段,并且该字段对应数据库中的主键,那么entity framework会自动将该字段设为自动增长。
若此时数据库中对应的主键并非是自动增长的,则在插入数据时会出现异常。
举个例子:
若有如下实体类test和数据库表test。
public class test
{
public int id { get; set; }
public string name { get; set; }
}create table test(
id int primary key,
name varchar(20)
);entity framework会将实体类test的id字段设为自动增长的,而此时表test中的主键id并没有设为自动增长。若此时向数据表test插入数据则会出现异常。
mysql数据库虽然会插入成功,但插入数据的id为始终0。而sqlserver则直接出现异常,无法插入。
解决办法1
将数据表中的id设为自增
create table test(
id int primary key auto_increment,
name varchar(20)
);解决办法2
在实体类test的id字段添加注解
using system.componentmodel.dataannotations.schema
public class test
{
[databasegenerated(databasegeneratedoption.none)]
public int id { get; set; }
public string name { get; set; }
}解决办法3
在相应的dbcontext中添加
protected override void onmodelcreating(dbmodelbuilder modelbuilder)
{
modelbuilder.entity<test>().property(p => p.id)
.hasdatabasegeneratedoption(databasegeneratedoption.none);
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论