我有一个Linq to SQL DBML
DBML中包含的是存储过程
当通过Microsoft SQL Server Managment工具执行proc时,它返回60行。
Bu DB并不认为它会返回任何结果。
以前是否有人遇到此问题或知道如何解决?
SP
编辑代码:
[Function(Name="dbo.WQNT_PeekViewNextZone")]
public int WQNT_PeekViewNextZone([Parameter(Name="Slot", DbType="Int")] System.Nullable<int> slot)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), slot);
return ((int)(result.ReturnValue));
}
这是Linq生成存储过程插入到临时表中然后从proc结尾处的表中选择*的代码
答案 0 :(得分:2)
当您向设计添加存储过程时,如果不将其拖动到实体上,它会创建默认方式,即返回proc的整数结果。如果您在该过程中完成了任何select语句,则需要将该过程放在设计器中的实体之上,而不是放入方法窗格中,这将允许设计器生成返回IQueryable的适当方法。实体类型,而不是int。
答案 1 :(得分:0)
存储过程的结果应与LINQ模型的现有表完全匹配,或者应将存储过程和结果元素类型添加到dbml文件中。通常,如果您将存储过程放在设计器中的任何位置(而不是放在桌面上),设计人员会为您生成此内容。
您应该查看dbml文件以查看发生的情况。例如,这是我当前项目中dbml文件的一部分:
<Function Name="uspGetDepartments">
<ElementType Name="uspGetDepartmentsResult">
<Column Name="ParentDepartmentId" Type="System.Int32" DbType="Int"
CanBeNull="true" />
<Column Name="DepartmentId" Type="System.Int32" DbType="Int" CanBeNull="true" />
<Column Name="DepartmentName" Type="System.String" DbType="NVarChar(200)"
CanBeNull="true" />
</ElementType>
</Function>
这意味着我有一个名为uspGetDepartments
的存储过程,它返回uspGetDepartmentsResult
类型的对象。看一下相应的designer.cs
文件,我看到了:
[global::System.Data.Linq.Mapping.FunctionAttribute()]
public ISingleResult<uspGetDepartmentsResult> uspGetDepartments()
{
IExecuteResult result = this.ExecuteMethodCall(
this, ((MethodInfo)(MethodInfo.GetCurrentMethod())));
return ((ISingleResult<uspGetDepartmentsResult>)(result.ReturnValue));
}
和
public partial class uspGetDepartmentsResult
{
private System.Nullable<int> _ParentDepartmentId;
private System.Nullable<int> _DepartmentId;
private string _DepartmentName;
public uspGetDepartmentsResult() {}
[global::System.Data.Linq.Mapping.ColumnAttribute(
Storage="_ParentDepartmentId", DbType="Int")]
public System.Nullable<int> ParentDepartmentId
{
get { return this._ParentDepartmentId; }
set
{
if ((this._ParentDepartmentId != value))
{
this._ParentDepartmentId = value;
}
}
}
[global::System.Data.Linq.Mapping.ColumnAttribute(
Storage="_DepartmentId", DbType="Int")]
public System.Nullable<int> DepartmentId
{ ... }
[global::System.Data.Linq.Mapping.ColumnAttribute(
Storage="_DepartmentName", DbType="NVarChar(200)")]
public string DepartmentName
{ ... }
}
答案 2 :(得分:0)
我最后采用了简单的方法
剥离存储过程以返回空的临时表
将其删除到linq中,然后添加代码,而不是在select命令
之前运行不是最好的方式,但它只是一个小项目
由于 为你的帮助人