我正在使用LINQ to SQL更新我的数据库。我插入了很多记录,当我调用SubmitChanges()时,LINQ to SQL会为每个对象执行一条insert和一条select语句。在我的对象被插入到数据库中之后,我并不真正关心更新它们。
您知道我可以阻止LINQ to SQL在insert语句之后发出select语句吗?这应该会让我的应用程序更快。
发布于 2009-01-02 20:49:33
你在找ColumnAttribute.AutoSync。如果您使用的是设计器,请检查每一列的Auto-Sync属性,并将其设置为Never。
编辑: Ok,这对你不起作用。准备好接受一些地图黑客吧!
当我插入一些自动生成的主键列时,我得到这样的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给我一个无效操作异常:“无法对‘表(TableName)’执行创建、更新或删除操作,因为它没有主键。”
尝试3:我从设计器中删除了自动生成的列,然后将另一列标记为主键。即使该列不是数据库中的主键,LINQ的DataContext也将使用它来跟踪行标识。对于给定DataContext的观察记录,它必须是唯一的。
第三次尝试生成了以下SQL (这就是您所要求的)
INSERT INTO [dbo].[TableName]( fieldlist )
VALUES (@p0, @p1, @p2, @p3, @p4)发布于 2009-01-02 19:13:43
我现在记不起设置了,但是在设计器中,在列的属性上,您有一些“刷新”设置。
发布于 2011-06-22 04:03:03
我曾经在一个项目中遇到过这个问题。我简单地使用了context.ExecuteCommand(这里是{sql string .})。这是针对一个导致性能问题的插入。最简单的修复,易于查看和维护,而不是在我看来挖掘模型。
https://stackoverflow.com/questions/407720
复制相似问题