我有一个 Foo 类,它可以有一个父 Foo、许多子 Foo 和许多 Snafu。NHibernate 正在 Foo 和 Snafu 表中生成 Foo_id 和 ParentFoo_id。重复字段不仅浪费内存,而且当其中一个重复引用最终为 NULL 时也会导致问题。这是使用 SQL Server 2012。
为什么会发生这种情况,我怎样才能让它生成一个 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)