使用SubSonic 2.2更新主键值

时间:2010-01-08 04:28:46

标签: subsonic subsonic2.2

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

我的代码大致如下:

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

这不会更新我的记录。

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

当我使用SQL Server探查器时,我可以看到以下代码被发送到DB:

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充分发挥其潜力非常感兴趣,所以任何建议都将受到高度赞赏。

此致

费尔南多

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

相当确定SubSonic 2也不支持。