c# - 实体的主键字段设置为 0 而不是 null

标签 c# asp.net-mvc entity-framework

我有一个 Person 实体类型,如下所示:

public partial class Person
{    
    public int PersonID { get; set; }
    public byte Gender { get; set; }
    public string IDNumber { get; set; }
}

当我为了将他保存到数据库而创建一个新 Person 时,主键 PersonID 设置为 0,而不是 null。

编码:
var theNewGuy = new MyEntities.Person();

在这一行之后,theNewGuy.PersonID = 0。问题是,我如何告诉它插入一个新的 Person 并为其分配下一个可用的主键?显然,我不希望它为 0,但数据库中已经有一个 PersonID = 0;

保存代码:
Velo.People.Add(theNewGuy);
Velo.SaveChanges();//throws error

抛出异常:
违反 PRIMARY KEY 约束“PK_PERSON”。无法在对象“dbo.Person”中插入重复键。重复的键值为 (0)。
该语句已终止。

最佳答案

主键不能为 Null。 PK 必须是唯一的,而 Null 不是。另外,int不是可以为空的类型,所以它的默认值为 0。

EntityFramework 应该能够找出 PersonIDPerson的键,但以防万一尝试粘贴 [Key]属性就在那里。此外,您可以将其强制为 auto increment列添加 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]归因于您的 PersonID属性(property)。

关于c# - 实体的主键字段设置为 0 而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106055/

相关文章:

c# - MVC4 Razor 中文件上传的空异常

c# - Entity Framework - 循环然后调用 SaveChanges

c# - 在不删除数据的情况下重命名 Entity Framework Core 中的外键

wpf - Datagrid SelectedItem 在 window.IsEnabled = false 上丢失

c# - 如何制作可伪造的事件

c# - asp.net web 控件的公共(public)属性保存在哪里?

c# - 分页在 MVC Webgrid 中不起作用

asp.net-mvc - 如何在正则表达式中忽略大小写?

asp.net-mvc - MVC Updatemodel 和 Linq-To-Sql 创建新实体而不是更新

c# - 避免 .NET Core 中 n 层架构的循环依赖