Сгенерированный код DBML неправильно помечает возвращаемые столбцы как NOT NULL для хранимых процедур - PullRequest
0 голосов
/ 13 августа 2010

У меня есть хранимая процедура в SQL Server, которая возвращает некоторые данные с помощью выбора:

CREATE PROCEDURE spDDIs_Get(@ID INT) AS

IF NOT EXISTS (SELECT ID FROM tDDIs WHERE ID = @ID)
    RAISERROR('ICT0005:DDI does not exist', 18, 1)

ELSE
    SELECT D.ID, D.SchemeID, C.ID ConfigurationID, C.Description Configuration,
           D.RecordCall, D.DDINumber
      FROM tDDIs D
      LEFT JOIN tConfigurations C ON C.ID = D.ConfigurationID
     WHERE D.ID = @ID

Столбец ConfigurationID, возвращаемый этой процедурой, в некоторых случаях возвращает NULL.

Однако в Visual Studio, когда я перетаскиваю эту хранимую процедуру из обозревателя сервера в мой файл DBML, который автоматически генерирует код для использования с LINQ, он неправильно устанавливает для этого столбца тип переменной, который не может иметь значение null:

    public partial class spDDIs_GetResult
{

    private int _ID;        
    private int _SchemeID;      
    private int _ConfigurationID;       
    private string _Configuration;      
    private bool _RecordCall;       
    private string _DDINumber;

    public spDDIs_GetResult()
    {
    }

    [Column(Storage="_ID", DbType="Int NOT NULL")]
    public int ID
    {
        get
        {
            return this._ID;
        }
        set
        {
            if ((this._ID != value))
            {
                this._ID = value;
            }
        }
    }

    [Column(Storage="_SchemeID", DbType="Int NOT NULL")]
    public int SchemeID
    {
        get
        {
            return this._SchemeID;
        }
        set
        {
            if ((this._SchemeID != value))
            {
                this._SchemeID = value;
            }
        }
    }

    [Column(Storage="_ConfigurationID", DbType="Int NOT NULL")]
    public int ConfigurationID
    {
        get
        {
            return this._ConfigurationID;
        }
        set
        {
            if ((this._ConfigurationID != value))
            {
                this._ConfigurationID = value;
            }
        }
    }

            // .... rest of the class omitted ....

}

Мне нужно определение:

private int? _ConfigurationID;

не

private int _ConfigurationID;

Определение метода также имеет атрибут, помечающий его как Int NOT NULL. Я не возражаю исправить это вручную в сгенерированном коде, но если мне нужно внести изменения в хранимую процедуру и повторно импортировать ее, переменные возвращаются в ненулевое значение, что вызывает ошибку, и это настоящая боль для держите это в курсе.

Как я могу либо заставить его правильно импортировать и разрешить пустые значения, либо убедиться, что мой отредактированный код не перезаписывается? Есть ли способ добавить атрибуты к хранимой процедуре в SQL Server, чтобы пометить столбец как обнуляемый?

Спасибо, Ben

1 Ответ

1 голос
/ 13 августа 2010

Я сам решил эту проблему.Я взял столбец из неправильной таблицы в запросе.Если я изменю запрос на этот, он работает:

        SELECT D.ID, D.SchemeID, D.ConfigurationID, C.Description Configuration,
           D.RecordCall, D.DDINumber
      FROM tDDIs D
      LEFT JOIN tConfigurations C ON C.ID = D.ConfigurationID
     WHERE D.ID = @ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...