2012-03-07 4 views
1

На сервере SQL я создаю UDF. Назовем его fnCompanyDetails. Он выбирает некоторую информацию о компании из нескольких совместных таблиц. Затем я перетаскиваю эту функцию в новый .dbml моего проекта VB. Я хочу использовать его с LINQ. Smth вот так:SubmitChanges с LINQ to SQL и пользовательскими функциями

Dim company = (From c In d.fnCompanyDetails(sap) 

        Select New With { 

     .Sap = c.txtSAP, 

     .CompanyName1 = c.txtCompanyName1, _ 

     .CompanyName2 = c.txtCompanyName2, _ 

     }) 

Результат этого запроса Отображается пользователем в форме. Если какое-то поле изменено, я хочу отправить изменения в мою базу данных, но возможно ли это, если я так прошу, из UDF? Thank y

ответ

1

Нет, к сожалению, это невозможно сделать простым способом. Linq-to-sql поддерживает , считывая для пользовательских типов, но поддерживает только обновления типов объектов, которые точно соответствуют таблице.

Обычно лучший способ - всегда читать объекты чистого объекта, если они считываются с намерением их обновить.

Другим решением является создание объектов сущности из данных, возвращаемых из udf, а затем присоединение этих объектов к контексту. Если вы сначала присоедините объекты в исходном состоянии, а затем внесите изменения после, вам следует уйти без проблем с отслеживанием изменений.

+0

Спасибо, Андерс! С этими объектами-объектами - вы имеете в виду, что этот объект должен повторять структуру таблицы базы данных, чтобы можно было загрузить изменения в таблицы? И в том случае, когда я хочу иметь всю свою логику базы данных (все UDF, SP, представления и т. Д.) На SQL-сервере (я имею в виду не строить их с LINQ в коде), не лучше ли работать с набором данных, чем идти в LINQ? – kzub

+1

Объекты сущности создаются автоматически для вас, если вы перетащите таблицу на поверхность конструктора. Намерение с linq-to-sql состоит в том, чтобы разместить (почти) всю бизнес-логику в коде. Если вы используете UDF или SP, тогда могут быть другие варианты, которые лучше. –

+0

В этом случае я не совсем понимаю всю концепцию LINQ :(если я должен выбрать всю таблицу, которая затем может быть отображена в сгенерированный класс, а затем обновлена ​​и вставлена. Я попытался создать объект объекта «tblCompany» из результата, возвращаемого моим UDF, но я получил ошибку «Явное построение типа объекта« tblCompany »в запросе не допускается». Таким образом, этот подход, похоже, не работает :(Я думаю, что я должен лучше продолжить классический ADO.Net – kzub

Смежные вопросы