如何使用 Fluent NHibernate 从另一列 table 获取一列
How to fetch one column from another table using Fluent NHibernate
我有一个 产品 table:
产品编号
产品描述
类别 ID
还有一个类别 table:
类别 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?
...
我的产品class:
public class Products
{
public virtual int ProductId { get; set; }
public virtual string ProductDescription { get; set; }
public virtual int CategoryId { get; set; }
public virtual Category Category { get; set; }
public virtual int? CategoryDescription { get; set; } // Not in the db table.
}
我的目标是让 Fluent-NHibernate 通过指定的映射自动填充上面 class 中的 CategoryDescription
字段。
我使用了 this answer 建议的 join
语句,但我得到了以下语句的各种异常:
List<Products> products = session.Query<Products>().ToList();
注意:我可以从数据库 中提取所有产品而无需 类别中的相应列 table,因此我知道我的数据库连接良好,并且应用程序的基本功能是健全的。
我是 Fluent-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
});
这将生成一个查询,其中只有 return 您需要的列。如果您 return 个完整的实体,您将 return 不需要的信息。
我有一个 产品 table:
产品编号
产品描述
类别 ID
还有一个类别 table:
类别 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?
...
我的产品class:
public class Products
{
public virtual int ProductId { get; set; }
public virtual string ProductDescription { get; set; }
public virtual int CategoryId { get; set; }
public virtual Category Category { get; set; }
public virtual int? CategoryDescription { get; set; } // Not in the db table.
}
我的目标是让 Fluent-NHibernate 通过指定的映射自动填充上面 class 中的 CategoryDescription
字段。
我使用了 this answer 建议的 join
语句,但我得到了以下语句的各种异常:
List<Products> products = session.Query<Products>().ToList();
注意:我可以从数据库 中提取所有产品而无需 类别中的相应列 table,因此我知道我的数据库连接良好,并且应用程序的基本功能是健全的。
我是 Fluent-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
});
这将生成一个查询,其中只有 return 您需要的列。如果您 return 个完整的实体,您将 return 不需要的信息。