我需要使用与最初创建的值完全相同的值来重新创建数据库。因此,我需要添加具有预定义PK值的记录。在这种情况下,PK是数据库中的身份,当我尝试定义它的值时,它将被忽略,而从身份中获取它的值。没有引发任何错误,但忽略了我提供的PK值。

例:

Category category = new Category()
                        {
                            CategoryID=1,
                            CategoryName="Beverages",
                            Description="Soft drinks, coffees, teas, beers, and ales"
                        };
ctx.Categories.Add(category);
ctx.SaveChanges();


笔记:


我先使用POCO,首先编写代码,因此,我没有要配置的EDMX模型。
我不想使用ctx.Database.ExecuteSqlCommand()。我希望保持与数据库无关的方法。

最佳答案

在这种情况下,PK是身份


在这种情况下,永远不要手动插入其值。将列设置为标识后,DB应该负责控制ID。因此,无法从EF传递值(除非您想破坏其他功能)。您必须使用ExecuteSqlCommand并创建复杂的SQL,该SQL将:


打开表的身份插入
插入记录
关闭表的身份插入


SET IDENTITY_INSERT tableName ON必须允许在标识列中插入值

09-04 16:34
查看更多