本文主要是介绍解决Entity Framework中自增主键的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《解决EntityFramework中自增主键的问题》:本文主要介绍解决EntityFramework中自增主键的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝...
Entity Framework中自增主键问题
当实体类中有China编程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; China编程} python public string Name { get; set; } }
解决办法3
在相应的DbContext中添加
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entitphpy<Test>().Property(p => p.ID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); }
总结
这篇关于解决Entity Framework中自增主键的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!