linq2sql:删除组合键实体

时间:2018-12-06 12:30:45

标签: linq-to-sql

由于生成了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),则只得到一行要删除的行。值得一提的是,日期值不相同

enter image description here

问题:生成SQL脚本时,如何强制linq2sql仅使用主键?日期有什么问题?相同的服务插入行并读取它们。        UPD: 注意到另一个问题。首先,我删除引用的实体,然后再删除父实体。父实体的SQL日志条目:

DELETE FROM [person].[tblAward] WHERE 0 = 1
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.7.3056.0

我想对这个宏大的WHERE子句进行澄清

0 个答案:

没有答案