我正在使用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
{
...
}
答案 0 :(得分:5)
是 - Linq-to-SQL数据模型为任何表中的每个列都有一个名为UpdateCheck
的属性。该属性指示在更新行之前是否将使用该列来检查行是否未更改。
同样的属性也用于检查行在删除之前没有更改。因此,如果您只是将模型中的所有列(主键除外)设置为UpdateCheck = Never
,那么您应该得到您正在寻找的内容。
答案 1 :(得分:2)
没有看到你的SQL表结构或你的LINQ-to-SQL类,很难说。
但是,您看到的行为是在LINQ-to-SQL层不相信表中存在主键时标识记录。
您应该针对相关表重新生成LINQ-to-SQL类,并查看是否在正确归因主键的情况下不会生成正确的模型。