【问题标题】:ASP.NET MVC Data RepositoryASP.NET MVC 数据存储库
【发布时间】:2018-03-23 02:57:10
【问题描述】:

我收到一条错误消息:

"对象类型不存在映射 f__AnonymousType6`1[[System.Int32,mscorlib,版本=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 到已知的托管 提供者原生类型。”

public List<Product> GetCategoryProducts(int catID)
{
    string sql = @"select p.ProductID, p.ItemName, p.ImageName
    from Product p, ProductCategory pc
    where p.ProductID = pc.ProductID
    and pc.CategoryID = @catID
        order by p.ItemName";

    List<Product> products = db.Products.SqlQuery(sql, new { catID }).ToList();
    return products;
}

我不知道为什么会出现这个错误

【问题讨论】:

  • SqlQuery方法帮助中有说明。但是为什么要打扰 SQL,这是非常简单的 LINQ To Entities 查询,您没有使用 ORM 的好处。
  • 请不要删除您之前的问题并更改为新问题。创建一个新问题,或编辑您的问题以包含其他问题信息(保留旧问题)。通过删除问题,您将阻止其他任何人从您的问题中受益。为什么有些答案似乎无法解决当前问题,这也令人困惑。

标签: c# sql asp.net-mvc


【解决方案1】:

您应该做两件事 a) 更改查询的返回类型,SqlQuery&lt;Product&gt;b) 将参数 catID 传递给您的查询:

var products = db.Products
                 .SqlQuery<Product>(sql,new SqlParameter("catID", catID))
                 .ToList();

我正在设置 pc.CategoryID = @catID。

确实,您声明了一个参数化查询,但您没有为参数传递值。以下只是一个字符串:

@"select p.ProductID, p.ItemName, p.ImageName
from Product p, ProductCategory pc
where p.ProductID = pc.ProductID
and pc.CategoryID = @catID 
order by p.ItemName"

您没有为CategoryID 设置任何值。这是SqlQuery 方法的工作,只要你通过一个,它就会处理这个问题。

【讨论】:

  • 我添加了 List products = db.Products.SqlQuery(sql, new { catID }).ToList();修复标量变量错误
  • 现在我收到此错误:不存在从对象类型 f__AnonymousType6`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 到 a已知的托管提供程序本机类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多