Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 告诉SubmitChanges不要更改主键值?_C#_Database_Linq To Sql - Fatal编程技术网

C# 告诉SubmitChanges不要更改主键值?

C# 告诉SubmitChanges不要更改主键值?,c#,database,linq-to-sql,C#,Database,Linq To Sql,有没有办法告诉Linq.DataContext.SubmitChanges不要更改我分配给传入InsertOnSubmit的对象的主键 我正在编写一些迁移代码,将旧的Access数据库转换为新版本软件使用的SQL Server数据库。格式在某些地方发生了很大的变化(因此我编写了自定义迁移代码)。但是,其中一个表需要保持与旧数据库相同的主键值。SubmitChanges函数似乎应用了它认为应该是主键的内容 我可以通过在创建表时不将该字段设置为主键(然后在填充后将其更改为主键)来解决这个问题。但是有

有没有办法告诉Linq.DataContext.SubmitChanges不要更改我分配给传入InsertOnSubmit的对象的主键

我正在编写一些迁移代码,将旧的Access数据库转换为新版本软件使用的SQL Server数据库。格式在某些地方发生了很大的变化(因此我编写了自定义迁移代码)。但是,其中一个表需要保持与旧数据库相同的主键值。SubmitChanges函数似乎应用了它认为应该是主键的内容


我可以通过在创建表时不将该字段设置为主键(然后在填充后将其更改为主键)来解决这个问题。但是有更好的办法吗?例如,设置SubmitChanges方法查看的选项?

数据库字段是标识字段吗?如果是这样,请将其作为标识字段删除,LINQ to SQL将使用您在数据库级别上定义为
identity
的新主键来自code吗??如果是这样:SQL Server数据库将为您创建新的标识值-除非您明确关闭此选项(有关详细信息,请参阅)。除了直接执行SQL语句之外,我不知道如何在LINQtoSQL中做到这一点……是的,这是一个标识字段。在创建表时不设置此选项是我在上一段中的意思。我只是想知道是否有一个选项可以提示linqtosql使用我指定的键值,而不是更改它。我可能只是在创建表时删除标识,然后在重新添加标识后更改表。实际上,我在这样做时遇到了一个问题:我不想更改Linq表的类定义,使其不包含标识字段,因为这样对主程序不正确(迁移代码是主exe的一部分)。我可以将迁移代码分离到一个新的exe中-但这是我需要维护数据库架构的另一个地方。或者我不应该使用Linq to SQL来实现这一点-但这意味着要重写我已经编写的大量迁移代码。@marc_s:我尝试使用SET IDENTITY_INSERT,但这对Linq不起作用。在在这种情况下,我认为您应该使用其他方法(SqlBulkCopy、带INSERT语句的显式SQL)来更新数据库。无论如何,LINQtoSQL确实不太适合(也不是专门设计的)批量操作。