Fluent nhibernate 一种平桌

Fluent nhibernate 一种平桌,fluent-nhibernate,Fluent Nhibernate,我有一个问题(显然:) 有没有可能在nHibernate中以这种方式进行动态查询。。。 我有很多表(比如说:User,City,Country,Continet,…)是否可以将这些数据放平,这样我就不需要知道这些表之间的连接(为用户获取大陆,而不进行连接User.City,City.Country,coutry.Continet) 关键是我想将数据展平,这样用户就可以在用户界面上动态选择数据,而不必知道应用程序背后的数据模型 如果有人告诉我怎么做,或者如果有可能的话,那就太好了 web上的一个例

我有一个问题(显然:) 有没有可能在nHibernate中以这种方式进行动态查询。。。 我有很多表(比如说:User,City,Country,Continet,…)是否可以将这些数据放平,这样我就不需要知道这些表之间的连接(为用户获取大陆,而不进行连接User.City,City.Country,coutry.Continet)

关键是我想将数据展平,这样用户就可以在用户界面上动态选择数据,而不必知道应用程序背后的数据模型

如果有人告诉我怎么做,或者如果有可能的话,那就太好了


web上的一个例子是GoogleAnalytics自定义报告(您可以在UI上拖动维度和度量并获得结果)

您说您使用的是Fluent NHibernate,这意味着,假设您的域模型结构正确,您不需要使用任何联接

“展平”数据是一个UI问题,而不是数据库问题,因此,除非必须,否则不应该展平数据模型或为UI简化数据模型

假设您有以下实体:

public class User
{
    public virtual string Name { get; set; }
    public virtual City City { get; set; }
}

public class City
{
    public virtual string Name { get; set; }
    public virtual Country { get; set; }
}

public class Country
{
    public virtual string Name { get; set; }
}
如果您想按某个国家筛选用户,则对此的LINQ查询(假设NHibernate 3)将是:

var country = session.Single<Country>(x => x.Name == "Africa");
session.Query<User>().Where(x => x.City.Country == country);
var country=session.Single(x=>x.Name==“非洲”);
session.Query().Where(x=>x.City.Country==Country);

是的,这很简单,但有更多的表,我无法预测用户将选择什么实体。。。它可能是城市,国家,大陆,用户。。。我的意思是按(城市、国家、大陆、用户等)分组好的,我需要再添加一个表“访问量”,我想“动态地”知道有多少访问量来自国家、城市、continet或用户,或者可能是产品,…嗯,我知道的唯一方法是让用户能够在客户端执行这些操作,然后对服务器进行编程,以便根据用户的条件适当地过滤内容。我不确定是否有更通用的方法来处理它,事实上,这可能不是一个好主意,因为您可能会遇到
SELECT N+1
问题。我也在考虑某种表示数据库中表之间关系的表。从这里我可以得到关系,如果用户想要大陆和访问(“Continental.Name”和“Visits.NoOfVisits”),我可以动态搜索访问大陆(访问-城市-国家-大陆)的连接,然后使用nHibernate检索数据。只是大声想一想,但我认为这可能是解决办法(整天都在捣乱,uf)