Fluent nhibernate Fluent NHibernate非规范化视图映射
我有平面视图,应该映射到两个独立的C模型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
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创建、更新和删除操作 那么,数据库中是否有容器表和项目表,以及显示两者数据的视图?