在插入后停止LINQ to SQL执行select语句

Lan*_*her 6 linq sql-server sql-server-2005 linq-to-sql

我正在使用LINQ to SQL来更新我的数据库.我正在插入大量记录,当我调用SubmitChanges()时,LINQ to SQL会为每个对象执行insert和select语句.在将对象插入数据库后,我并不在意更新它们.

你知道我可以阻止LINQ to SQL在insert语句之后发出select语句吗?这应该会让我的应用程序更快.

Amy*_*y B 6

您正在寻找ColumnAttribute.AutoSync.如果您正在使用设计器,请在每列中检查自动同步属性并将其设置为从不.

编辑: 好的,这不适合你.为一些映射hackery支撑自己!

当我插入一些自动生成的主键列时,我得到这个SQL:

INSERT INTO [dbo].[TableName]( fieldlist )
VALUES (@p0, @p1, @p2, @p3, @p4)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
Run Code Online (Sandbox Code Playgroud)

据我了解您的要求,您不希望选择SELECT

尝试1:我转到主键字段并将auto-generated设置为false.这导致Sql异常"当IDENTITY_INSERT设置为OFF时,无法在表'TableName'中为标识列插入显式值." 换句话说,linq为该列指定了一个值.

尝试2:我从设计器中删除了自动生成的列.这导致Linq给我一个无效的操作异常:"无法对'Table(TableName)'执行创建,更新或删除操作,因为它没有主键."

尝试3:我从设计器中删除了自动生成的列,然后我将另一列标记为主键.尽管此列不是数据库中的主键,但LINQ的DataContext将使用它来跟踪行标识.对于给定DataContext的观察记录,它必须是唯一的.

第三次尝试生成以下SQL(这是您要求的)

INSERT INTO [dbo].[TableName]( fieldlist )
VALUES (@p0, @p1, @p2, @p3, @p4)
Run Code Online (Sandbox Code Playgroud)

  • 对于那些第一次使用ADO.Net工作正常的东西来说,这似乎是一项荒谬的工作. (2认同)

lep*_*pie 0

我现在不记得该设置,但在设计器中,在列的属性上,您有一些“刷新”设置。