带有NHibernate 3.0 GA&;的可选子类映射(左连接);FNH
免责声明:总的来说,我对NH&ORM相当陌生 免责声明:为了与NH3.0GA配合使用,我正在使用来自的FNH构建 简而言之,问题是我想使用FNH的带有NHibernate 3.0 GA&;的可选子类映射(左连接);FNH,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,免责声明:总的来说,我对NH&ORM相当陌生 免责声明:为了与NH3.0GA配合使用,我正在使用来自的FNH构建 简而言之,问题是我想使用FNH的子类映射作为一种方法,将每个子类的左联接表映射到我的对象层次结构,该对象层次结构定义为: public class MyBaseClass { public virtual int Id { get; set; } } public class MySubClass : MyBaseClass { public virtual
子类映射
作为一种方法,将每个子类的左联接表映射到我的对象层次结构,该对象层次结构定义为:
public class MyBaseClass {
public virtual int Id { get; set; }
}
public class MySubClass : MyBaseClass {
public virtual string SubClassVal { get; set; }
}
这通过FNH映射为:
public class MyBaseClassMap : ClassMap<MyBaseClass> {
public MyBaseClassMap() {
Table("BaseClass");
Id(x => x.Id, "Id").GeneratedBy.Assigned();
}
}
public class MySubClassMap : SubclassMap<MySubClass> {
public MySubClassMap() {
Table("SubClass");
KeyColumn("Id");
Map(x => x.SubClassVal);
}
}
当然,在返回的集合中没有实例,因为这可能是在它下面执行内部联接。这就是我被困的地方。我已经设法发现指定一个“可选”连接是我应该做的。我试图将MySubClassMap
修改为:
public class MySubClassMap : SubclassMap<MySubClass> {
public MySubClassMap() {
Join("SubClass", j => {
j.KeyColumn("Id");
j.Optional();
j.Map(x => x.SubClassVal); // note that I've tried the map outside the Join() below, to no avail
});
//Map(x => x.SubClassVal);
}
}
我想这些都是相关信息。我怀疑我可能会在NH的新版本和FNH的新版本之间遇到突破性的变化。但是,正如前面提到的,我是一个新手,很可能在做一些愚蠢的事情。如果是这样的话,我会非常感激有人用可能是显而易见的东西打我的头
提前感谢。实体有一种类型,不会改变。如果您的BaseClass表中只有一条记录,那么该实体将始终是MyBaseClass
如果实体可以更改其“类型”,则不应使用继承,而应使用组合。我认为我太笨拙了。谢谢你帮我整理。
var rep = new Repository();
var subclasses = rep.GetAll<MySubClass>();
public class MySubClassMap : SubclassMap<MySubClass> {
public MySubClassMap() {
Join("SubClass", j => {
j.KeyColumn("Id");
j.Optional();
j.Map(x => x.SubClassVal); // note that I've tried the map outside the Join() below, to no avail
});
//Map(x => x.SubClassVal);
}
}
MyApp -->
FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() -->
NHibernate.Cfg.FluentConfiguration.BuildConfiguration()