父/子关系中的Fluent NHibernate奇数映射问题
我有一个Foo类,它可以有一个父Foo、许多子Foo和许多Snafu。NHibernate正在Foo和Snafu表中生成Foo_id和ParentFoo_id。重复字段不仅浪费内存,而且在其中一个重复引用最终为NULL时也会导致问题。这是使用SQL Server 2012 为什么会发生这种情况?我如何才能让它生成一个Foo_id Foo类和映射:父/子关系中的Fluent NHibernate奇数映射问题,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我有一个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 { g
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)
公共类Foo{
公共int Id{get;set;}
public Foo ParentFoo{get;set;}
公共IList ChildFoos{get;set;}
公共IList混乱{get;set;}
}
公共类FooMap:ClassMap{
公共地图(){
Id(x=>x.Id);
参考文献(x=>x.ParentFoo);
HasMany(x=>x.ChildFoos);
有许多(x=>x.Snafus);
}
}
----结果Foo表----
Id(主键,整数,非空)
Foo_id(FK,int,null)x.Foo);
Map(x=>x.Value);
}
}
----结果Snafu表----
Id(主键,整数,非空)
Foo_id(FK,int,null)是否可以尝试在引用映射中显式指定列名?我猜,但这就是我为类似情况所做的一些映射
public class FooMap : ClassMap<Foo> {
public FooMap() {
Id(x=>x.Id);
References(x=>x.ParentFoo, "ParentFoo_id");
HasMany(x=>x.ChildFoos);
HasMany(x=>x.Snafus);
}
}
公共类FooMap:ClassMap{
公共地图(){
Id(x=>x.Id);
参考文献(x=>x.ParentFoo,“ParentFoo_id”);
HasMany(x=>x.ChildFoos);
有许多(x=>x.Snafus);
}
}
父foo应该是反向的,并且需要为这两个映射指定列。
所以正确的映射应该如下所示
References(x => x.ParentFoo)
.Column("PARENT_FOO_ID");
HasMany(x => x.ChildFoos)
.Inverse() // Important!
.KeyColumn("PARENT_FOO_ID");
我必须对SnafusHasMany(x=>x.Snafus)执行类似的操作代码>