2009-01-02 75 views
6

我正在使用LINQ to SQL来更新我的数据库。我插入了很多记录,当我调用SubmitChanges()时,LINQ to SQL为每个对象执行insert和select语句。插入数据库后,我并不真正在意更新对象。在插入后从执行select语句停止LINQ to SQL

你知道我可以阻止LINQ to SQL在插入语句之后发出select语句吗?这应该使我的应用程序更快。

回答

0

我现在不记得这个设置,但是在设计器中,对于列的属性,您有一些“刷新”设置。

6

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

编辑: 好的,这并没有为你工作。为自己的映射hackery加油!

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

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

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value] 

当我明白你的要求,你不希望SELECT

尝试1:我去了主键字段并将自动生成设置为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) 
+0

感谢您的建议。我这样做了,但分析器在插入和更新后仍然显示一个选择。我不知道为什么。 – 2009-01-05 21:56:33

0

我有这个问题与项目一次。我简单地使用了context.ExecuteCommand({sql string here。})。这是针对导致性能问题的一个插入。在我看来,最简单的修复方式,便于查看和维护,而不是通过模型挖掘。