开发者

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

目录
  • Entity Framework中自增主键问题
    • 解决办法1
    • 解决办法2
    • 解决办法3
  • 总结

    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 tabjavascriptle 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; 编程客栈}
     python   public string Name { get; set; }
    }

    解决办法3

    在相应的DbContext中添加

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entitphpy<Test>().Property(p => p.ID)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
    }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜