親Foo、多くの子Foo、および多くのSnafuを持つことができるFooクラスがあります。NHibernateは、FooテーブルとSnafuテーブルの両方でFoo_idとParentFoo_idを生成しています。重複フィールドはメモリを浪費するだけでなく、重複参照の1つがNULLになると問題が発生します。これはSQLServer2012を使用しています。
なぜこれが発生するのですか?これを取得して単一のFoo_idを生成するにはどうすればよいですか?
Fooクラスとマッピング:
public class Foo {
public int Id { get; set; }
public Foo ParentFoo { get; set; }
public IList<Foo> ChildFoos { get; set; }
public IList<Snafu> Snafus { get; set; }
}
public class FooMap : ClassMap<Foo> {
public FooMap() {
Id(x=>x.Id);
References(x=>x.ParentFoo);
HasMany(x=>x.ChildFoos);
HasMany(x=>x.Snafus);
}
}
----Resulting Foo Table----
Id (PK, int, not null)
Foo_id (FK, int, null) <- refers to ParentFoo
ParentFoo_id (FK, int, null) <- also refers to ParentFoo
Snafuクラスとマッピング:
public class Snafu {
public int Id { get; set; }
public Foo Foo { get; set; }
public string Value { get; set; }
}
public class SnafuMap : ClassMap<Snafu> {
public SnafuMap() {
Id(x=>x.Id);
References(x=>x.Foo);
Map(x=>x.Value);
}
}
----Resulting Snafu Table----
Id (PK, int, not null)
Foo_id (FK, int, null) <- refers to Foo
ParentFoo_id (FK, int, null) <- refers to same Foo
Value (nvarchar(255), null)