Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/nhibernate/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有NHibernate 3.0 GA&;的可选子类映射(左连接);FNH_Nhibernate_Fluent Nhibernate_Nhibernate Mapping - Fatal编程技术网

带有NHibernate 3.0 GA&;的可选子类映射(左连接);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

免责声明:总的来说,我对NH&ORM相当陌生

免责声明:为了与NH3.0GA配合使用,我正在使用来自的FNH构建

简而言之,问题是我想使用FNH的
子类映射
作为一种方法,将每个子类的左联接表映射到我的对象层次结构,该对象层次结构定义为:

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()