LINQ to SQL с хранимыми процедурами и пользовательским параметром типа таблицы
Я использую LINQ to SQL с хранимыми процедурами в SQL Server 2008. Все работает хорошо, кроме одной проблемы. L2S не может сгенерировать метод хранимой процедуры с заданным пользователем типом таблицы в качестве параметра.
Подпись метода в панели дизайна dbml использует объект для типа параметра вместо типа таблицы, и когда я попытался скомпилировать, я получил ошибку:
Error: DBML1005: Mapping between DbType 'Structured' and
Type 'System.Object' in Parameter 'ParaName' of Function 'dbo.StoredProcName'
is not supported.
Есть ли способ обойти эту проблему? Я не хочу возвращаться к традиционному доступу к данным ADO.NET.
Ответы
Ответ 1
Я не думаю, что сейчас есть что-то доступное - параметры табличного значения были введены в SQL Server 2008 - после того, как LINQ и LINQ2SQL уже отсутствовали.
Я не нашел упоминания ни в одном из сообщений в блоге о поддержке табличных параметров в LINQ2SQL в .NET 4.0 до сих пор.
UPDATE:
Здесь сообщение в блоге от Damien Guard о исправлениях и улучшениях для Linq-to-SQL в .NET 4.0.
ОБНОВЛЕНИЕ 2:
К сожалению, по словам Дэмиена, эта функция не поддерживается в .NET 3.5 и не поддерживается в .NET 4.0: - (
Невозможно сделать в 3.5 или 4.0 прямо сейчас
:( [] amien
Ответ 2
Я столкнулся с этим сообщением , которое предоставляет способ вызова хранимых процедур с параметрами TVP из Linq2Sql. Это круглый метод, который в основном создает частичное расширение класса вашего dataContext и передает dataTable с использованием SqlCommand. Надеюсь, это поможет.
Ответ 3
У меня была такая же проблема, и пример кода Ryan Prechel из следующей ссылки помог мне решить проблему.
Как передать параметры значения таблицы в хранимую процедуру из .net-кода