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

EF6 and VS 2012 - Generates faulty code for stored procedures

我有 VS 2012 更新 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,但没有成功:

有解决办法吗?

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