1

我目前正在使用 SubSonic 2.2 开发应用程序,但在更新表格中复合 PK 的列之一时遇到问题。

我的代码大致是这样的:

foreach (pageItem page in pages) {
    page.IdFile = newIdFile;
    page.PageNumber = counter;
    counter++;
    page.Save();
}

这不会更新我的记录。

我的 pageItem 表包含构成 PK 的 4 列。我只需要更新其中一个来模拟我正在将页面对象从一个文件移动到另一个文件,以避免创建新记录只是为了复制除该 ID 和页码之外的所有相同值。

当我使用 SQL Server 探查器时,我可以看到以下代码已发送到数据库:

exec sp_executesql N'UPDATE [dbo].[pageItem] SET [IdFile] = @IdFile, [PageNumber] = @PageNumber WHERE [IdPage] = @IdPage AND [IdCont] 
= @IdCont AND [IdExp] = @IdExp AND [IdFile] = @IdFile; 
SELECT @IdPage AS id',N'@PageNumber int,@IdPage int,@IdCont int,
@IdExp varchar(1),@IdFile int', @PageNumber=4,@IdPage=329, @IdCont=1, @IdExp='1', @IdFile=156

所以基本上我的问题是更新没有为新旧 IdFile 键使用不同的值,它们都使用 @IdFile 参数。

是否有一种解决方法最好不涉及使用 CodingHorror,例如,我可以用它来更新我的记录?我不介意使用原始 SQL 语句,只是我对充分发挥 SubSonic 的潜力非常感兴趣,因此将不胜感激任何建议。

问候,

费尔南多

4

3 回答 3

0

您必须在部分类文件中编写这些特殊情况。查看为具有多个主键的表生成的代码以定位问题。然后在非生成文件中编写任何必要的代码。我认为 v3 也不处理复合键。

于 2010-01-09T02:40:06.300 回答
0

在许多环境中,复合 PK 可能会很痛苦。我认为SS2.x 对它们的支持不是很好,但现在找不到参考来证实这一点。有没有办法重新设计你的表以拥有一个 PK 字段?

于 2010-01-08T10:23:24.347 回答
0

Subsonic 3 不支持复合主键。参考:Rob's - 作者 - 在这篇文章中的回答:SubSonic 3 and multiple PK columns

可以肯定的是,SubSonic 2 也不支持此功能。

于 2010-01-10T08:57:05.920 回答