首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityFramework6从存储过程获得complext返回值

EntityFramework6从存储过程获得complext返回值
EN

Stack Overflow用户
提问于 2017-03-08 17:03:10
回答 1查看 714关注 0票数 2

我的ASP.Net MVC应用程序需要执行一个存储过程,以便根据一组参数检查重复的工作订单。存储过程庞大而复杂,因此将其转换为Linq到SQL查询是不可能的。另外,我们不使用实体数据模型(,EDMX)文件;我们只有域模型、视图模型和数据上下文。存储过程具有以下签名:

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[spGetDupWOs]
    -- Add the parameters for the stored procedure here
    @ProjectName VARCHAR(200) = '""',
    @City VARCHAR(100) = '',
    @State VARCHAR(100) = '',
    @ProjectNumber VARCHAR(50) = '',
    @County VARCHAR(50) = '',
    @Customer VARCHAR(400) = '',
    @QuoteRecipients VARCHAR(400) = NULL,
    @ProjectID BIGINT = NULL
    ...

    SELECT DuplicateID, ProjectNameMatchRank, ProjectNameMatch, ProjectName ...

我试着在我的控制器里叫它,比如:

代码语言:javascript
复制
IEnumerable<DuplicateProjects> duplicateCheckResults = db.Database.SqlQuery< DuplicateProjects>("spGetDupWOs", new { ProjectName = ProjectName, City = City, State = propal.State, ProjectNumber = ProjectNumber, County = County, Owner = Owner, BID_QuoteRecipients = QuoteRecipients, ProjectID = -1 });

当我运行这样的异常时,得到一个异常:

对象类型<>f__AnonymousType6`8不存在映射[ System.String、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089、System.String、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089、System.String、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089、System.String、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089、PublicKeyToken=b77a5c561934e089、System.String、mscorlib、mscorlib、,System.String、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089、System.Int32、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089]到已知的托管提供者原生类型。

我做错了什么?

更新:当我将所有传递的参数更改为ObjectParamter时,仍然会收到相同的错误消息。

更新2:

我对代码做了一些重构。下面是它现在的样子:

代码语言:javascript
复制
            List<SqlParameter> spl = new List<SqlParameter>();

            var ProjectNameParameter = new SqlParameter("ProjectName", project.ProjectName);
            spl.Add(ProjectNameParameter);
            var CityParameter = new SqlParameter("City", project.City);
            spl.Add(CityParameter);
            var StateParameter = new SqlParameter("State", project.State);
            spl.Add(StateParameter);
            var ProposalNumberParameter = new SqlParameter("ProjectNumber", project.ProjectNumber);
            spl.Add(ProposalNumberParameter);
            var CountyParameter = new SqlParameter("County", project.County);
            spl.Add(CountyParameter);
            var OwnerParameter = new SqlParameter("Owner", project.Owner);
            spl.Add(OwnerParameter);
            var BidRecipientParameter = QuoteRecipients != null ?
                new SqlParameter("QuoteRecipients", QuoteRecipients) :
                new SqlParameter("QuoteRecipients", "");
            spl.Add(BidRecipientParameter);
            var ProjectIDParameter = new SqlParameter("ProjectID", typeof(long));
            spl.Add(ProposalIDParameter);

            IEnumerable<DuplicateProposals> duplicateCheckResults = db.Database.SqlQuery<DuplicateProposals>("spGetDupWOs ProjectName = {0} City = {1}, State = {2}, ProjectNumber = {3}, County = {4}, Owner = {5}, QuoteRecipients = {6}, ProjectID = {7}",
                spl.ToArray());

现在我得到了错误:

SqlParameter已经包含在另一个SqlParameterCollection中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-08 18:16:10

查询字符串之后的SqlQuery<T>的进一步参数构成了一个参数数组,该方法将使用这个数组来用编号参数参数来回填查询字符串,就像String.Format一样。由于您传递的是一个匿名对象,所以该方法试图将其作为单个参数来处理,并且无法将其转换为字符串。因此,是的,您需要使用SqlParameter手动添加params,或者更改调用以与此方法兼容的方式处理它:

代码语言:javascript
复制
db.Database.SqlQuery< DuplicateProjects>(
    "spGetDupWOs @ProjectName = {0}, @City = {1}, @State = {2}, @ProjectNumber = {3}, @Country = {4}, @Owner = {5}, @BID_QuoteRecipients = {6}, @ProjectID = {7}",
    ProjectName,
    City,
    propal.State,
    ProjectNumber,
    County,
    Owner,
    QuoteRecipients,
    -1
);

增加了自由间距以提高可读性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42677453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档