2

У меня есть хранимая процедура SQL Server, которую я выполняю, используя строку запроса, которая возвращает таблицу со следующими столбцами (ItemNumber, ItemDescription, UPC, Price, Count), представляющая количество магазинов, которые Товар имеет цену. Таким образом, элемент A равен 1,00 при 50 магазинах и 2,00 в 55 магазинах.Проблемы с отображением компонентов в среде NHibernate

Вот код для выполнения Выборки:

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: не могу t найти сеттер для свойства «ItemNumber» в классе «Report.Entities.RetailPrice».

Почему код пытается загрузить это на объект RetailPrice вместо объекта Item? Имеет ли это какое-либо отношение к запуску хранимой процедуры в качестве запроса Fetch?

Как только я получу это решение, как я могу сделать создание элемента Item.Upc идентификатора на RetailPriceMap?

+0

Когда вы получаете 'RetailPrice' без использования хранимой процедуры, делает все работает правильно (т.е. с использованием' session.Get (...) ') –

+0

я делаю что-то подобное основанный на прямых сопоставлениях таблиц, и это отлично работает. –

+0

Что делает метод 'Fetch'? –

ответ

0

Ваш построенный объект для розничной цены с полным отображением. Трансформатор AliasToBean не использует сопоставления, но вместо этого преобразует столбцы в свойства по соглашению. Изменение Трансформатор AddEntity:

public IEnumerable<TEntity> Fetch(String sql,IEnumerable<Parameter> parameters) 
{ 
    return this.BuildQuery(sql, parameters).AddEntity(typeof(TEntity)).List<TEnti‌​ty>(); 
} 
+0

Это сработало и, чтобы получить его, где я мог бы использовать Item как KeyReference, все, что мне нужно было сделать, это добавить карту для класса Item. –

Смежные вопросы