我有一个带有GUID主键的表。在ActiveRecord中,它使用PrimaryKeyType.GuidComb进行设置。是否可以使用手动分配的PK创建此记录?如果我在记录中设置主键并运行Create(),则会分配一个新ID。如果我运行Save(),我会收到一个错误(正如人们所期望的那样)。
原因: 该表位于两个数据库中。有时需要在这两个数据库之间复制记录。当记录在数据库中移动时,我想保留ID。
答案 0 :(得分:1)
没有。主键是生成(例如GuidComb)或手动分配的,它不能同时是两者。您可以创建两个继承自定义除主键之外的所有属性的基类的类,然后这两个类中的每一个都将其主键定义为已分配或生成。但是我建议在这里使用SQL,因为单个INSERT INTO ... SELECT
比使用NHibernate / ActiveRecord更有效。
答案 1 :(得分:0)
我最终将PrimaryKeyType设置为Assigned。然后我用覆盖的Create函数处理它:
public override void Create() {
if (ID == default(Guid)) ID = GUIDGenerator.Generate();
base.Create();
}
将它放在OnSave中会更好,但主要密钥不能在拦截器中修改。这适用于我的应用程序,但只有在显式创建对象时才会调用此代码。如果对象是通过级联创建的,它将无法工作。