Entity framework 将来自存储过程函数的自定义属性映射到实体框架

Entity framework 将来自存储过程函数的自定义属性映射到实体框架,entity-framework,stored-procedures,nopcommerce,Entity Framework,Stored Procedures,Nopcommerce,我正在使用nop commerce电子商务开源1.9,其中他们使用实体框架 它们有一个存储过程,用于加载所有产品并将该存储过程映射到sp_ProductLoadAllPaged函数 现在我改变了存储过程,sp的输入输出是另一列,即语言 我还在product.cs类文件中声明languages属性 但现在,当我使用QuickWatch语言时,所有产品的列都为空 我在模型浏览器中从数据库更新了.edmx文件 现在我检查是否缺少类和存储过程中的languages属性的一些映射 所以,请告诉我如何将这个

我正在使用nop commerce电子商务开源1.9,其中他们使用实体框架

它们有一个存储过程,用于加载所有产品并将该存储过程映射到sp_ProductLoadAllPaged函数

现在我改变了存储过程,sp的输入输出是另一列,即语言

我还在product.cs类文件中声明languages属性

但现在,当我使用QuickWatch语言时,所有产品的列都为空

我在模型浏览器中从数据库更新了.edmx文件

现在我检查是否缺少类和存储过程中的languages属性的一些映射

所以,请告诉我如何将这个新的存储过程列映射到产品类语言属性

有关更多信息,请参见下图

正如您可以检查存储过程final select语句一样,我在其中进行了更改以获取该产品的语言

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

仅修改类是不够的。新属性必须在EDMX中已知,并且来自EDMX的模板必须在类中为您生成该属性


所以,如果sp_ProductLoadAllPaged是一个实体,则必须在EDMX中手动添加属性并映射它。如果是复杂类型,则必须在函数导入向导中更新复杂类型。如果在进行手动更改之前将其以XML形式打开并保存当前版本,则也可以直接在EDMX中执行这两种方法。

如果我通过右键单击“选择编辑”编辑函数,则复杂类型将被禁用。在这种情况下,存储过程无法返回复杂类型,您必须编辑实体。