3

我在使用 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
{
    ...
}
4

2 回答 2

5

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

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

在此处输入图像描述

于 2012-07-04T05:36:39.367 回答
2

如果没有看到您的 SQL 表结构或 LINQ-to-SQL 类,就很难分辨。

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

您应该针对有问题的表重新生成 LINQ-to-SQL 类,并查看这是否不会产生正确的主键属性模型。

于 2012-07-04T05:33:56.910 回答