我需要使用与最初创建的值完全相同的值来重新创建数据库。因此,我需要添加具有预定义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
必须允许在标识列中插入值