当前位置: 代码网 > it编程>编程语言>Asp.net > 解决Entity Framework中自增主键的问题

解决Entity Framework中自增主键的问题

2025年06月19日 Asp.net 我要评论
entity framework中自增主键问题当实体类中有int类型的字段,并且该字段对应数据库中的主键,那么entity framework会自动将该字段设为自动增长。若此时数据库中对应的主键并非是

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); 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com