C# 为什么';t实体框架在尝试插入唯一种子列时出错?
我遵循实体框架指南,内容如下: 在我需要添加博客的部分,我执行以下操作:C# 为什么';t实体框架在尝试插入唯一种子列时出错?,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我遵循实体框架指南,内容如下: 在我需要添加博客的部分,我执行以下操作: var blog = new Blog { Name = "TEST123", BlogId=3 }; db.Blogs.Add(blog); db.SaveChanges(); 这将在不给我任何错误的情况下工作,但是BlogId将自动生成,因为表将列作为唯一的种子值 为什么当我运行代码时,这没有给我任何错误?它只是在Name列中插入“TEST123”并自动生成id?我认为应该给我错误来警告我插入的值不会有3的B
var blog = new Blog { Name = "TEST123",
BlogId=3 };
db.Blogs.Add(blog);
db.SaveChanges();
这将在不给我任何错误的情况下工作,但是BlogId将自动生成,因为表将列作为唯一的种子值
为什么当我运行代码时,这没有给我任何错误?它只是在Name列中插入“TEST123”并自动生成id?我认为应该给我错误来警告我插入的值不会有3的BlogId
更新:它没有给出任何错误,但它确实在博客数据库中插入了“TEST123”,但BlogID不是3,由SQL Server设置。我不能代表Entity Framework团队发言,但我可以想到三个原因:
BlogId
是自动生成的,因此不会在它发送给数据库服务器的INSERT
SQL命令中包含该列Blog
时几乎不想设置BlogId
,因此实体框架没有必要浪费时间检查您是否已将BlogId
设置为值BlogId
在执行newblog{…}
操作时,如果没有明确给出BlogId
值,则将为BlogId
分配一个默认值(即零),因此实体框架无法确定您是否已将BlogId
设置为值EntityFramework忽略自动生成的列(如ID)的值。如果您考虑在不指定
Id
属性的情况下创建一个新的Blog
对象,C#将为其分配一个0
值,因为这是数值类型的默认值。所以每次你想用EF在数据库中插入一些东西,你就会有一个ID值为的对象,这应该是个问题。这就是为什么EF会忽略DB模型的ID属性值。我不知道您使用的是哪个数据库,但如果您明确设置自动生成的值,通常会覆盖这些值,因为实体的属性中有一个属性设置为true。我记不清确切的名字,但有点像StoreGeneratedPattern。它只是忽略了您提供的值。更改它,您将得到一个错误。如果您不想自动生成它,您可以使用应用于BlogId
属性的属性[DatabaseGenerated(DatabaseGeneratedOption.None)]
。如果您有异常,请发布完整的错误消息和stacktrace。