为什么实体框架在尝试插入唯一的种子列时不给出错误?
本文关键字:出错 错误 种子 框架 实体 唯一 插入 为什么 | 更新日期: 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设置。
我不能代表实体框架团队发言,但我可以想到三个原因:
-
实体框架有你的数据模型,所以它知道
BlogId
是自动生成的,因此不会在INSERT
SQL命令中包含该列,它发送给数据库服务器; -
程序员在添加
Blog
时几乎不会想要设置BlogId
,因此实体框架没有必要浪费时间检查您是否已将BlogId
设置为值; -
BlogId
将被分配一个默认值(即零),当你做new Blog { ... }
没有明确地给BlogId
一个值,所以实体框架不能确定你是否已经设置BlogId
的值或不,无论如何。
EntityFramework忽略自动生成的列(如id)的值。如果你想创建一个新的Blog
对象而不指定Id
属性,c#将为它分配一个0
值,因为这是数字类型的默认值。每次你想用EF在DB中插入一些东西时你会有一个带有ID值的对象,这应该是个问题。这就是EF忽略DB模型的ID属性值的原因。