解决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)。
加载中,请稍侯......
精彩评论