为什么实体框架在尝试插入唯一的种子列时不给出错误?

本文关键字:出错 错误 种子 框架 实体 唯一 插入 为什么 | 更新日期: 2023-09-27 18:14:36

我遵循实体框架指南:

https://msdn.microsoft.com/en-au/data/jj200620

在我需要添加博客的部分,我做了以下操作:

var blog = new Blog { Name = "TEST123",
BlogId=3 }; 
db.Blogs.Add(blog); 
db.SaveChanges(); 

这将工作,没有给我任何错误,但BlogId将自动生成,因为它应该,因为表有列作为唯一的种子值。

为什么当我运行代码时没有给我任何错误?它只是插入"TEST123"在列的名称和自动生成的id ?我认为它应该给我错误,警告我插入的值不会有3的BlogId ?

更新:它没有给出任何错误,但它确实插入"TEST123"到博客数据库,但BlogID不是3,并由SQL Server设置。

为什么实体框架在尝试插入唯一的种子列时不给出错误?

我不能代表实体框架团队发言,但我可以想到三个原因:

  1. 实体框架有你的数据模型,所以它知道BlogId是自动生成的,因此不会在INSERT SQL命令中包含该列,它发送给数据库服务器;

  2. 程序员在添加Blog时几乎不会想要设置BlogId,因此实体框架没有必要浪费时间检查您是否已将BlogId设置为值;

  3. BlogId将被分配一个默认值(即零),当你做new Blog { ... }没有明确地给BlogId一个值,所以实体框架不能确定你是否已经设置BlogId的值或不,无论如何。

EntityFramework忽略自动生成的列(如id)的值。如果你想创建一个新的Blog对象而不指定Id属性,c#将为它分配一个0值,因为这是数字类型的默认值。每次你想用EF在DB中插入一些东西时你会有一个带有ID值的对象,这应该是个问题。这就是EF忽略DB模型的ID属性值的原因。

相关文章: