使用指定的PK创建新记录 - Castle ActiveRecord

时间:2010-10-22 05:00:34

标签: nhibernate castle-activerecord

我有一个带有GUID主键的表。在ActiveRecord中,它使用PrimaryKeyType.GuidComb进行设置。是否可以使用手动分配的PK创建此记录?如果我在记录中设置主键并运行Create(),则会分配一个新ID。如果我运行Save(),我会收到一个错误(正如人们所期望的那样)。

原因: 该表位于两个数据库中。有时需要在这两个数据库之间复制记录。当记录在数据库中移动时,我想保留ID。

2 个答案:

答案 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中会更好,但主要密钥不能在拦截器中修改。这适用于我的应用程序,但只有在显式创建对象时才会调用此代码。如果对象是通过级联创建的,它将无法工作。