Fluent nhibernate Fluent NHibernate非规范化视图映射

Fluent nhibernate Fluent NHibernate非规范化视图映射,fluent-nhibernate,nhibernate-mapping,Fluent Nhibernate,Nhibernate Mapping,我有平面视图,应该映射到两个独立的C模型 class Container { public virtual int Id {get;set;} public virtual string Title{get;set;} public virtual List<Item> Items{get;set;} } class Item { public virtual string Code {get;set;} public virtual string N

我有平面视图,应该映射到两个独立的C模型

class Container
{
   public virtual int Id {get;set;}
   public virtual string Title{get;set;}
   public virtual List<Item> Items{get;set;}
}

class Item
{
   public virtual string Code {get;set;}
   public virtual string Name {get;set;}
}
视图包含以下列:

集装箱|标题|代码|名称

1 |“标题1”|“代码1”|“名称1”

1 |“标题1”|“代码2”|“名称2”

2 |“标题2”|“代码1”|“名称1”

我如何做到这一点,才能进行以下查询:

session.Get<Container>(1)
=>{Id=1,Title=title1,Items=[{Code=code1,Name=name1},{Code=code2,Name=name2}]}

我应该以某种方式将ContainerId映射为Id,但在内部视图中它不是唯一的,因为它被非规范化为包含多个。我还应该在“Item”映射-Item中映射一些Id。代码可以用于此


谢谢

如果您描述的两个实体在数据库中表示为两个单独的表,并且您还有一个基本上是这两个表组合的视图,那么我会将它们映射为这两个表。因此,您有容器和项目的实体映射,还有一个额外的实体,我称它们为视图本身的DAL中的视图对象

通常,我会像这样映射数据库视图:

public class ContainerItemViewMap : ClassMap<ContainerItem>
{
    public ContainerItemViewMap()
    {
        Table("V_CONTAINER_ITEM");
        ReadOnly();
        Not.LazyLoad();
        SchemaAction.None();

        //Location mappings
        Id(x => x.ContainerId, "CONTAINER_ID");
        Map(x => x.Title);
        Map(x => x.Code);
        Map(x => x.Name);

    }
}

此外,在检索我的视图对象时,我将始终使用无状态会话,因为对我来说,在这里使用ISession没有意义,因为您不会对数据执行任何CUD创建、更新和删除操作

那么,数据库中是否有容器表和项目表,以及显示两者数据的视图?