我有一个SQL Server存储过程,我正在使用查询字符串执行,该字符串返回一个表,其中包含以下列(ItemNumber,ItemDescription,UPC,Price,Count),表示Item对于给定的商店的数量价钱。所以A项在50家商店是1.00,在55家商店是2.00。
以下是执行Fetch的代码:
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”的setter。
为什么代码试图在RetailPrice对象而不是Item对象上加载它?是否与将存储过程作为Fetch查询运行有关?
一旦我解决了问题,我怎样才能在RetailPriceMap上制作Id的Item.Upc部分?
答案 0 :(得分:0)
您构建的零售价实体具有完整的映射。 AliasToBean转换器不使用映射,而是按照约定将列映射到属性。将Transformer更改为AddEntity:
public IEnumerable<TEntity> Fetch(String sql,IEnumerable<Parameter> parameters)
{
return this.BuildQuery(sql, parameters).AddEntity(typeof(TEntity)).List<TEntity>();
}