EF6和VS 2012 - 为存储过程生成错误代码

时间:2015-04-10 20:21:25

标签: sql-server visual-studio-2012 stored-procedures entity-framework-6

我有VS 2012 Update 4,我已经安装了EF6 Tools for VS2012

方法:数据库优先。

尝试生成存储过程时,生成的代码引用了错误的命名空间... 好的,现在我可以更新.tt文件中的命名空间,但是生成的方法需要一个ObjectResult数组,而不是ObjectResult的对象。

这是错误的:

 public virtual ObjectResult<CustOrdersDetail_Result> CustOrdersDetail(Nullable<int> orderID)
        {
            var orderIDParameter = orderID.HasValue ?
                new ObjectParameter("OrderID", orderID) :
                new ObjectParameter("OrderID", typeof(int));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CustOrdersDetail_Result>("CustOrdersDetail", orderIDParameter);
}

并且此代码有效:

public virtual ObjectResult<CustOrdersDetail_Result> CustOrdersDetail(Nullable<int> orderID)
            {
                var orderIDParameter = orderID.HasValue ?
                new ObjectParameter[]{    new ObjectParameter("OrderID", orderID)} :
                   new ObjectParameter[]{ new ObjectParameter("OrderID", typeof(int))};

                return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<CustOrdersDetail_Result>("CustOrdersDetail", orderIDParameter);
    }

现在我可以手动修复Array事件了,但是在edmx代码生成之后它会消失,当然......

我还看了Ladislav's answer,但没有成功:

有没有解决方法?

1 个答案:

答案 0 :(得分:1)

要重新添加代码生成项,请从模型中删除所有生成的文件,然后右键单击模型并选择添加新生成项。你永远不应该修改tt文件我认为有一种方法可以实现海关生成器,否则在生成项目的新更新中很难将更改带到新版本,因为TT文件中的所有更改都会丢失。