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 文件中的所有更改都会丢失。
我有 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 文件中的所有更改都会丢失。