Linq to sql хранит процесс, не возвращая результаты - PullRequest
1 голос
/ 02 июля 2010

У меня есть Linq to SQL DBML

В DBML содержится хранимый процесс

Когда процедура выполняется с помощью инструмента управления Microsoft SQL Server, возвращается 60 строк.

Но DBML не считает, что он возвращает какие-либо результаты.

Кто-нибудь имел эту проблему раньше или знает, как ее решить?

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 генерирует для хранимых процедур, вставляет во временную таблицу, а затем выбирает * из таблицы в конце процедуры

Ответы [ 3 ]

2 голосов
/ 02 июля 2010

Когда вы добавляете сохраненный процесс в проект, если вы не перетаскиваете его на объект, он создает его по умолчанию, то есть возвращает целочисленный результат процесса. Если вы сделали какие-либо операторы select в этой процедуре, вам нужно поместить процедуру поверх сущности в конструкторе, а не в область методов, это позволит конструктору сгенерировать соответствующий метод, который возвращает IQueryable из вашего тип сущности вместо int.

0 голосов
/ 02 июля 2010

В конце концов я выбрал простой подход

Удалил сохраненный процесс, чтобы просто вернуть пустую временную таблицу

бросил его в linq и затем добавил код, который выполнялся перед командой выбора1005 *

не лучший способ, но это только маленький проект

Спасибо за вашу помощь, ребята

0 голосов
/ 02 июля 2010

Либо результат вашей хранимой процедуры должен точно соответствовать существующей таблице вашей модели 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
    { ... }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...