ブラウンフィールドデータベースを使用していて、指定されたIDの列以外の列でそのサブクラスに結合するサブクラスマップを構成しようとしています。login
テーブルには、IDとして使用したい主キー列がlogin_sk
あります。1つの列を介して2つのテーブルに結合しlogin_cust_id
ます(より楽しくするために、隣接するテーブルの対応する列の名前は異なります)。login_cust_id
UserMapのIDとして設定すると、期待どおりにそのサブクラスに参加します。login_cust_id
私が望むのは、UserオブジェクトのIDとして使用したくない明らかな理由です。
public class UserMap : ClassMap<IUser>
{
public UserMap()
{
Table("login");
Id(x => x.Id).Column("login_sk"); // want to setup map like this
// if used instead this works for subclass joining / mapping
// Id(x => x.Id).Column("login_cust_id");
// would prefer to only reference login_cust_id for subclass mapping
}
}
public class CustomerUserMap : SubclassMap<CustomerUser>
{
public CustomerUserMap()
{
Table("customer");
Map(c => c.DisplayName, "cust_mail_name");
Map(c => c.RecordChangeName, "cust_lookup_name");
KeyColumn("cust_id");
}
}
public class EntityUserMap : SubclassMap<EntityUser>
{
public EntityUserMap()
{
Table("entity");
Map(c => c.DisplayName, "entity_name");
KeyColumn("entity_id");
}
}
私がやりたいのは、login_cust_id
サブクラスに参加するときにのみ列を使用することです。これを指定できる流暢なマッピング設定はありますか?流暢なマッピングでない場合、機能する通常のNHibernate XMLマッピングはありますか?列をマップすることすらせず、可能であれば結合にのみ使用したいと思います。それが役立つ場合は、login_holder_type
どのテーブルに結合するかを示す潜在的な識別子列があります。
セットアップすることは私に思いIClassConvention
浮かびましたが、合格したものを突いた後、IClassInstance
私は私を助ける設定を決定することができませんでした。
public class UserIdConvention : IClassConvention, IClassConventionAcceptance
{
public void Apply(IClassInstance instance)
{
// do something awesome with instance.Subclasses to
// specify the use of login_cust_id for subclass joining...
}
public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
{
criteria.Expect(x => typeof(User).Equals(x.EntityType));
}
}
渡されたインスタンスに入力されたサブクラスコレクションがないため、より具体的なインスペクターを探すことIParentInspector
になりました。残念ながら、Fluent NHibernateIParentInstance
には、に対応する実装がないIParentConvention
ようIParentConventionAcceptance
ですIJoinedSubclassInspector
。おそらく自分で実装する前に実装することはできますが、間違ったツリーを吠えないようにしたかったのです。
この種のサブクラスIDの調整も可能ですか?マップまたはFluentNHibernateConventions名前空間のいずれかに明らかな何かが欠けていますか?親のIDとは異なる列/プロパティを持つ結合されたサブクラスにマップするにはどうすればよいですか?