我有一个Foo类,可以有一个Parent Foo,许多Child Foo和许多Snafu。 NHibernate在Foo和Snafu表中都会生成一个Foo_id和一个ParentFoo_id。重复字段不仅浪费内存,而且当其中一个重复引用结束NULL时也会导致问题。这是使用SQL Server 2012.父母/子女关系中流利的NHibernate奇数映射问题
为什么发生这种情况,我怎么能得到这个来产生一个单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
天翻地覆类和映射:
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)
我不得不做的混战'的hasMany(X => x.Snafus).Inverse()KeyColumn( “FOO_ID”)类似;' – Handprint 2013-03-12 14:51:40