表<t> .DeleteOnSubmit生成的SQL匹配所有列</t>

时间:2012-07-04 05:18:44

标签: .net linq-to-sql

我正在使用LINQ to SQL的棕色地块项目遇到问题,因此调用Table<T>.DeleteOnSubmit会导致SQL查询对表中的每一列都有WHERE子句。

这是默认行为吗?如何更改它以使其仅匹配主键?

修改

要确认,生成的类有一个主键:

[Column(Name="id", Storage="_Id", AutoSync=AutoSync.OnInsert, 
        DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public long Id
{
    ...
}

2 个答案:

答案 0 :(得分:5)

是 - Linq-to-SQL数据模型为任何表中的每个列都有一个名为UpdateCheck的属性。该属性指示在更新行之前是否将使用该列来检查行是否未更改。

同样的属性也用于检查行在删除之前没有更改。因此,如果您只是将模型中的所有列(主键除外)设置为UpdateCheck = Never,那么您应该得到您正在寻找的内容。

enter image description here

答案 1 :(得分:2)

没有看到你的SQL表结构或你的LINQ-to-SQL类,很难说。

但是,您看到的行为是在LINQ-to-SQL层不相信表中存在主键时标识记录。

您应该针对相关表重新生成LINQ-to-SQL类,并查看是否在正确归因主键的情况下不会生成正确的模型。