[英]Fluent NHibernate Component Mapping issue
我有一个正在使用查询字符串执行的SQL Server存储过程,该查询字符串返回一个表,表中的以下列(ItemNumber,ItemDescription,UPC,Price,Count)代表给定价格下Item的存储数量。 因此,项目A在50家商店中为1.00,在55家商店中为2.00。
这是执行提取的代码:
private IEnumerable<RetailPrice> FetchRetailPrices(IUnitOfWork unitOfWork, string upc)
{
string StoredProcedure = "EXEC RetailPrices @UPC = :upc";
List<Parameter> parameters = new List<Parameter>
{
new Parameter("upc", upc)
};
return unitOfWork.GetRepository<RetailPrice>().Fetch(
StoredProcedure, parameters);
}
这是我尝试使用Fluent NHibernate映射的对象:
namespace Report.Entities
{
[Serializable]
public class Item
{
public virtual string Upc { get; protected internal set; }
public virtual int ItemNumber { get; protected internal set; }
public virtual string ItemDescription { get; protected internal set; }
}
}
namespace Report.Entities
{
[Serializable]
public class RetailPrice
{
public virtual Item ItemDetails { get; protected internal set; }
public virtual decimal Price { get; protected internal set; }
public virtual int Count { get; protected internal set; }
}
}
这是我的地图:
namespace Report.Mappings
{
public class RetailPriceMap : ClassMap<RetailPrice>
{
public RetailPriceMap()
{
Id(a => a.Price).Column("Price");
Map(a => a.Count).Column("Count");
Component(a => a.ItemDetails, b =>
{
b.Map(c => c.ItemNumber).Column("ItemNumber");
b.Map(c => c.ItemDescription).Column("ItemDescription");
b.Map(c => c.Upc).Column("UPC");
});
}
}
}
现在,我只是以一个价格对一个项目执行此操作,并且我得到了PropertyNotFoundException:在类'Report.Entities.RetailPrice'中找不到属性'ItemNumber'的设置方法。
为什么代码尝试将其加载到RetailPrice对象而不是Item对象上? 它与将存储过程作为Fetch查询运行有关系吗?
解决问题后,该如何在RetailPriceMap上使Item.Upc成为ID的一部分?
您为零售价格建立了具有完整映射的实体。 AliasToBean转换器不使用映射,而是按照约定将列映射到属性。 将Transformer更改为AddEntity:
public IEnumerable<TEntity> Fetch(String sql,IEnumerable<Parameter> parameters)
{
return this.BuildQuery(sql, parameters).AddEntity(typeof(TEntity)).List<TEntity>();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.