C# 如何使用Fluent NHibernate从另一个表中获取一列

C# 如何使用Fluent NHibernate从另一个表中获取一列,c#,orm,fluent-nhibernate,C#,Orm,Fluent Nhibernate,我有一个产品表: 产品ID 产品描述 类别 和类别表: 类别 类别说明 ***对于每一种产品,我都想展示这样一行: 产品标识|产品说明|类别说明 我没有成功地形成上述任务所需的必要映射 我正在使用的产品映射: public ProductsMap() { Table("Products"); Id(x => x.ProductId); Map(x => x.ProductDescription); Map(x => x.CategoryId);

我有一个产品表:

产品ID 产品描述 类别

和类别表:

类别 类别说明

***对于每一种产品,我都想展示这样一行:

产品标识|产品说明|类别说明

我没有成功地形成上述任务所需的必要映射

我正在使用的产品映射:

public ProductsMap()
{
    Table("Products");

    Id(x => x.ProductId);
    Map(x => x.ProductDescription);
    Map(x => x.CategoryId);

    References(x => x.Categories)
        .Column("CategoryId")
        .Not.Nullable();

    // Need Join() statement here?
    ...
我的产品类别:

我的目标是让Fluent NHibernate通过指定的映射自动填充上述类中的CategoryDescription字段

我使用了由建议的join语句,但以下语句有各种例外:

List<Products> products = session.Query<Products>().ToList();
注意:我可以从数据库中提取所有产品,而不需要类别表中的相应列,因此我知道我的数据库连接良好,并且应用程序的基本功能良好


我对流利的NHibernate还不熟悉,在这方面我投入了不少时间,但我觉得我一事无成。我希望您能给我一些指导。

我有点困惑,因为您似乎混合了单数和复数,但我会为产品和类别创建单独的域映射

public class Product
{
    public virtual int ProductId { get; set; }
    public virtual string ProductDescription { get; set; }
    public virtual Category Category { get; set; }
}

public class Category
{
    public virtual int CategoryId { get; set; }
    public virtual string CategoryDescription { get; set; }
}
按照问题中的映射方式映射它们,然后创建视图模型

public class ProductViewModel
{
    public virtual int ProductId { get; set; }
    public virtual string ProductDescription { get; set; }
    public virtual string CategoryDescription { get; set; }
}
使用此查询填充的

        var products = session.Query<Products>().Select(p => new ProductViewModel()
        {
                ProductId =  p.ProductId,
                ProductDescription = p.ProductDescription,
                CategoryDescription = p.Category.CategoryDescription
        });

这将生成一个只返回所需列的查询。如果您返回完整的实体,您将返回您不需要的信息。

非常感谢!它起作用了。现在我必须了解它是如何工作的!:你能在Fluent NHibernate上推荐什么好的资源吗?PS:我不得不用这个答案:解决一个cast问题,但除此之外,它是完美的。是的,我包含的查询将返回一个IQueryable。托利斯特,托雷,。。。将运行查询并填充列表。对于您的映射问题,请检查此项我已访问过该页面,并将其添加到书签,但当时没有意义。我有一本名为NHibernate 3初学者指南[2011]的书,但它很旧,例如,使用Null而不是Null,而且一点也不清楚。在关系数据库基础上花费太多。如果我可以问的话,你是怎么学会的?
        var products = session.Query<Products>().Select(p => new ProductViewModel()
        {
                ProductId =  p.ProductId,
                ProductDescription = p.ProductDescription,
                CategoryDescription = p.Category.CategoryDescription
        });