Subsonic 使用亚音速2.2更新主键值

Subsonic 使用亚音速2.2更新主键值,subsonic,subsonic2.2,Subsonic,Subsonic2.2,我目前正在开发一个使用亚音速2.2的应用程序,我在更新表上复合PK的一列时遇到问题 我的代码大致如下: foreach (pageItem page in pages) { page.IdFile = newIdFile; page.PageNumber = counter; counter++; page.Save(); } 这不会更新我的记录 My pageItem表包含构成PK的4列。我只需要更新其中一个,以模拟我正在将页面对象从一个文件移动到另一个文件,

我目前正在开发一个使用亚音速2.2的应用程序,我在更新表上复合PK的一列时遇到问题

我的代码大致如下:

foreach (pageItem page in pages) {
    page.IdFile = newIdFile;
    page.PageNumber = counter;
    counter++;
    page.Save();
}
这不会更新我的记录

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

当我使用SQL Server profiler时,我可以看到以下代码被发送到数据库:

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语句,只是我对充分利用亚音速的潜力非常感兴趣,所以任何建议都将不胜感激

问候,


费尔南多

复合性PKs在许多环境中都是一种痛苦。我认为SS2.x不太支持它们,但是现在找不到一个参考来证实这一点。有没有办法重新设计表,使其具有单个PK字段?

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

亚音速3不支持复合主键。参考:罗布-作者-在这篇文章中的回答:


P<相当肯定,在亚音速2中也不支持这一点。

在这种情况下可能不是,但肯定会考虑亚音速的进一步使用,以避免这样的问题。你知道这些类型的问题在版本3中是否已经解决了吗?对不起,我不知道,我仍然在使用2.2