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。