繁体   English   中英

流利的NHibernate组件映射问题

[英]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<TEnti‌​ty>();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM