尝试插入唯一种子列时,为什么Entity Framework不会出错?

时间:2015-09-27 07:08:02

标签: c# sql-server entity-framework

我正在关注实体框架指南:

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”插入到博客数据库中,但是博客ID不是3,并且是由SQL Server设置的。

2 个答案:

答案 0 :(得分:0)

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

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

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

  3. 当您执行BlogId而没有明确给出new Blog { ... }值时,
  4. BlogId将被分配一个默认值(即零),因此实体框架无法确定您是否'无论如何,都要将BlogId设置为值。

答案 1 :(得分:0)

EntityFramework忽略自动生成的列(如ID)的值。如果您在未指定Blog属性的情况下创建新Id对象时考虑到这种情况,C#将为其分配0值,因为这是数值类型的默认值。因此,每当您想要在数据库中使用EF插入内容时,您将拥有一个具有ID值的对象,这应该是一个问题。这就是EF忽略数据库模型ID属性值的原因。