Сопоставить пользовательское свойство, поступающее из функции хранимой процедуры, в Entity Framework - PullRequest
0 голосов
/ 10 ноября 2011

Я использую nop commerce e-commerce с открытым исходным кодом 1.9, в котором они используют Entity Framework.

У них есть одна хранимая процедура, которая загружает все продукты и отображает эту хранимую процедуру на sp_ProductLoadAllPaged function

Теперь я изменяю эту хранимую процедуру, и на выходе этого sp есть еще один столбец, который languages.

Я также объявляю свойство languages в файле класса product.cs.

Но теперь, когда я использую быстрые часы, столбец languages для всех продуктов равен нулю.

Я обновил файл .edmx из базы данных в браузере модели.

Теперь я проверяю, что мне не хватает некоторого сопоставления атрибутов языка, которое в классе и хранимой процедуре

Итак, скажите, пожалуйста, как сопоставить этот новый столбец хранимой процедуры со свойствами языков классов продуктов.

см. Изображение ниже для получения дополнительной информации

mapping image

Как вы можете проверить окончательную инструкцию выбора хранимой процедуры, где я внес изменения, чтобы получить языки этого продукта

SELECT  
        p.ProductId,
        p.Name,
        p.ShortDescription,
        p.FullDescription,
        p.AdminComment,
        p.TemplateId,
        p.ShowOnHomePage,
        p.MetaKeywords,
        p.MetaDescription,
        p.MetaTitle,
        p.SEName,
        p.AllowCustomerReviews,
        p.AllowCustomerRatings,
        p.RatingSum,
        p.TotalRatingVotes,
        p.Published,
        p.Deleted,
        p.CreatedOn,
        p.UpdatedOn,
        p.AmazonLink,
        p.ProductCode,
        p.CategoryText,
        STUFF((Select ','+ [Name] from Nop_Language where Nop_Language.LanguageId in
    (Select Nop_ProductLocalized.LanguageID
    from
        Nop_ProductLocalized
    where
        ProductID=p.ProductId
    ) for xml path('')),1,1,'') as 'languages'
    FROM
        #PageIndex [pi]
        INNER JOIN Nop_Product p with (NOLOCK) on p.ProductID = [pi].ProductID
    WHERE
        [pi].IndexID > @PageLowerBound AND 
        [pi].IndexID < @PageUpperBound
    ORDER BY
        IndexID

1 Ответ

0 голосов
/ 10 ноября 2011

Недостаточно изменить класс.Новое свойство должно быть известно в EDMX, а шаблон из EDMX должен сгенерировать это свойство в классе для вас.

Поэтому, если sp_ProductLoadAllPaged является сущностью, вы должны вручную добавить свойство в EDMX и отобразить его.Если это сложный тип, вы должны обновить сложный тип в мастере импорта функций.Вы также можете использовать оба подхода непосредственно в EDMX, если откроете его как XML (сохраните текущую версию где-нибудь до внесения изменений вручную).

...