1

我在使用 SubSonic 3 和多个主键列时遇到问题。ActiveRecord T4 脚本似乎不支持它。

在 Settings.ttinclude 的第 173 行

return this.Columns.SingleOrDefault(x=>x.IsPK) ?? this.Columns[0];

它尝试获取单个主键列并失败。

有什么解决办法吗?

4

4 回答 4

3

我将调整模板以在将来添加对此的支持(因为很多人都遇到了问题),但您可以更改它:

return this.Columns.SingleOrDefault(x=>x.IsPK) ?? this.Columns[0];

对此:

return this.Columns.Where(x=>x.IsPK).ToArray();

(这是徒手的),然后将返回类型更改为 Column[]。从这个角度来看,更改应该非常简单,但是您需要从头到尾更改模板。

我知道人们喜欢复合键——它们对很多人来说特别重要,但是(我认为)我不喜欢这种设计。一个表(不是很多/很多)应该有一个 PK 来唯一标识一行......

我也明白很多人无法控制这样的事情:)。无论如何-如果您想帮助并分叉/推动它,我将非常感激。

于 2009-07-26T17:29:22.833 回答
3

许多 ORM 产品不支持复合键,因为这样做非常复杂。据我所知,NHibernate 是唯一有名的 .Net ORM 产品。

Mindscape 正在讨论对他们的 Lightspeed 产品版本 3 的复合键支持,但我对此知之甚少。

SubSonic 目前不支持复合键。

于 2009-07-26T02:56:01.243 回答
0

我相信EntitySpaces确实支持它们。

我的 2cents-

- 这是为了回答 womp 只是说 NHibernate 不是唯一众所周知的支持复合键的 ORM。至少在投票时发表评论(或侮辱 :p )-

于 2009-07-26T17:17:35.807 回答
0

您可能会创建一个视图,该视图通过连接复合键列来创建主键。例如,如果它们是 varchar 列 PK = COALESCE(K1, '|', K2, '|', K3)。如果它们是数字,您可以通过将每个键列乘以乘数来创建唯一的 PK 来执行类似的操作。

于 2009-07-26T03:06:09.760 回答