У меня есть хранимая процедура в 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