2010-01-08 62 views
1

我目前正在开发一个使用SubSonic 2.2的应用程序,并且在更新表格上的一个组合PK列时出现问题。使用SubSonic 2.2更新主键值

我的代码大致是这样的:

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

这不更新我的纪录。

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

当我使用SQL Server Profiler,然后我可以看到下面的代码被发射到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充分发挥潜力非常感兴趣,所以任何建议都将不胜感激。

问候,

费尔南多

回答

0

复合的PK可以在许多环境中的痛苦。我认为 SS2.x不支持他们很好,但现在不能找到一个参考来确认。你有办法重新设计你的桌子来拥有一个单一的PK领域吗?

+0

可能不是这种情况,但肯定会考虑进一步使用SubSonic,以避免此类问题。 你知道这些类型的问题是否已经在版本3中解决了吗? – Fervelas 2010-01-09 01:51:12

+0

对不起,我不知道,我还在用2.2 – kevinw 2010-01-09 18:36:31

0

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