Как использовать Entity Framework в хранимой процедуре CLR?

Я с нетерпением жду возможности перенести всю логику (которая реализована как управление объектами Entity Framework 4) на серверную сторону. Это выглядит простым (благодаря структуре приложения) и выгодным (поскольку все, что у меня есть, это один старый ноутбук в качестве клиента и один надежный сервер, на котором работает SQL Server 2008, а создание отдельной службы для логики может просто увеличить задержку. по сравнению с выполнением этого внутри базы данных).

Итак, как мне правильно использовать Entities Framework внутри хранимой процедуры CLR и сделать это с помощью SqlContext, предоставленного хост-сервером?

Внезапно я не смог найти никаких примеров в сети. Странно, что никто этого еще не ел. Значит ли это, что задача нелепая и я точно не должен этого делать? Будет не очень удобно использовать T-SQL и обращаться к таблицам напрямую вместо классов EF, потому что моя модель сильно использует наследование и имеет очень сложную структуру таблицы на тип, состоящую из множества очень простых таблиц.


person Ivan    schedule 08.05.2010    source источник
comment
никто еще этого не сделал ... должен позвонить в колокола. Это не способ использования хранимых процедур CLR.   -  person Peter Lillevold    schedule 08.05.2010


Ответы (4)


Нет, не можешь. Visual Studio даже не позволит вам добавить тип файла или проекта. (Это очень плохо, я хотел сделать то же самое, чтобы обработать действительно сложную логику.)

person Jaime Bula    schedule 19.01.2011

Вы не можете - по крайней мере, сейчас. CLR, содержащаяся в SQL Server 2005–2008 R2, представляет собой среду CLR .NET 2.0, а для Entity Framework 4 требуется платформа .NET 4.

Итак, на данный момент, когда вы делаете что-то внутри метода SQL-CLR, вы ограничены только прямым ADO.NET 2.0.

Тогда остается более серьезный вопрос: зачем вам использовать EF4 внутри функции SQL-CLR? Они предназначены для хранения процессов, определяемых пользователем функций, определяемых пользователем агрегатов - но, конечно, не для полноценных приложений баз данных, на самом деле ...

person marc_s    schedule 08.05.2010

Некоторые из нас не очень хотят поддерживать метаданные схемы базы данных в двух или более местах. EF отлично подходит для этого, но если кто-то хочет использовать преимущества производительности SQL-CLR, схема должна быть определена в ее контексте. На данный момент это означает настраиваемые коды метаданных в сборке SQL-CLR, которая генерирует DDL для определения базы данных и импорта ее в EF.

person Oleg Zhylin    schedule 28.02.2011

Кажется, что с SQL Server 2008 R2 или выше вы можете использовать .NET ver. 4.0. См. этот блог.

Я запускаю следующую команду для своего SQL Server 2010 Developer Eeition:

select value from sys.dm_clr_properties where name = 'version'

и получил следующий результат:

v4.0.30319

person abatishchev    schedule 06.05.2012
comment
Это не совсем правда. Во-первых, версия SQL Server 2008 R2 для среды CLR по-прежнему 2.0, но может использовать Framework версии 3.5. И то, что версия SQL Server 2012, 2014 и 2016 для среды CLR - 4.0, это не означает, что вы можете импортировать любую библиотеку DLL Framework, какую захотите. Это по-прежнему должна быть библиотека / DLL в чистом виде MSIL. Если он смешанный, он не будет импортирован, даже если это правильная версия CLR. - person Solomon Rutzky; 28.08.2015