私は、特定のテーブルを参照するIDを含む3列のテーブルを持っている状況があります。これらの3つの列に加えて、私はいくつかのプロパティを持ついくつかの列を持っています。NHibernateにヌル値を含む複合ID
3つの列がFoo、Bar、Bazであるとします。 Fooはnullではなく、Bar、Bazのいずれか1つがnullです。
私のエンティティとのマッピングは、(私は物事をシンプルに保つために望んでいたことを覚えておいてください)次のようになります。
public class FooBarBaz
{
public virtual Foo Foo { get; set; }
public virtual Bar Bar { get; set; }
public virtual Baz Baz { get; set; }
public virtual string Prop { get; set; }
public override bool Equals(Object obj)
{
/* checks for nulls etc. in the end
returns Foo == obj.Foo && Bar == obj.Bar && Baz == obj.Baz */
}
public override int GetHashCode()
{
/* builds unique string for (Foo,Bar,Baz)
taking nulls into account and gets it's hashcode */
}
}
public class FooBarBazMap : ClassMap<FooBarBaz>
{
public FooBarBazMap()
{
CompositeId()
.KeyReference(x => x.Foo, "Foo_Id")
.KeyReference(x => x.Bar, "Bar_Id")
.KeyReference(x => x.Baz, "Baz_Id");
Map(x => x.Prop);
}
}
は、私は手動ですべての3つの列がNULLでない行を作成し、このマッピングは完全に動作します良い。しかし、私のアプリケーションロジックは、2つのうちの1つ(Bar、Baz)がnullであるという事実に基づいており、その状況では、NHibernateはFooBarBazエンティティとしてnullを返します。
どうすればこの問題を解決できますか? NHibernateはCompositeIdでnull値を許可しますか?
私はこれらの列がプライマリキーであるとは言いませんでした。 – szymzet
しかし、compositeidとしてマップすると、nhはそれを考え、dbと同じように動作します。あなたの質問に答えてください:いいえ。 – Firo