我正在使用LINQ to SQL来更新我的数据库.我正在插入大量记录,当我调用SubmitChanges()时,LINQ to SQL会为每个对象执行insert和select语句.在将对象插入数据库后,我并不在意更新它们.
你知道我可以阻止LINQ to SQL在insert语句之后发出select语句吗?这应该会让我的应用程序更快.
您正在寻找ColumnAttribute.AutoSync.如果您正在使用设计器,请在每列中检查自动同步属性并将其设置为从不.
编辑: 好的,这不适合你.为一些映射hackery支撑自己!
当我插入一些自动生成的主键列时,我得到这个SQL:
INSERT INTO [dbo].[TableName]( fieldlist ) VALUES (@p0, @p1, @p2, @p3, @p4) SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
据我了解您的要求,您不希望选择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)