由于生成了SQL脚本,我无法删除实体列表。我在dbml文件中的表:
<Table Name="person.tblProcessedAward" Member="tblProcessedAwards">
<Type Name="tblProcessedAward">
<Column Name="AwardId" Type="System.Int32" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true" CanBeNull="false" />
<Column Name="ContactId" Type="System.Int32" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true" CanBeNull="false" />
<Column Name="ProcessedDateTime" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
<Association Name="tblContact_tblProcessedAward" Member="tblContact" ThisKey="ContactId" OtherKey="ContactId" Type="tblContact" IsForeignKey="true" />
<Association Name="tblAward_tblProcessedAward" Member="tblAward" ThisKey="AwardId" OtherKey="AwardId" Type="tblAward" IsForeignKey="true" />
</Type>
</Table>
调用DeleteAllOnSubmit
会依次为每个元素生成下一个SQL脚本日志:
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [3]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [38211]
-- @p2: Input DateTime (Size = -1; Prec = 0; Scale = 0) [4/12/2018 2:21:18 PM]
DELETE FROM [person].[tblProcessedAward] WHERE ([AwardId] = @p0) AND ([ContactId] = @p1) AND ([ProcessedDateTime] = @p2)
如果我尝试执行SELECT
而不是DELETE
,则不会得到任何行。如果删除最后一个子句AND ([ProcessedDateTime] = @p2)
,则只得到一行要删除的行。值得一提的是,日期值不相同
问题:生成SQL脚本时,如何强制linq2sql仅使用主键?日期有什么问题?相同的服务插入行并读取它们。 UPD: 注意到另一个问题。首先,我删除引用的实体,然后再删除父实体。父实体的SQL日志条目:
DELETE FROM [person].[tblAward] WHERE 0 = 1
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.7.3056.0
我想对这个宏大的WHERE
子句进行澄清