metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-02-11 12:01 am

О настоящем вуду.или Entity Framework

После запуска LINQ-To-Entities с Firebird ADO.NET провайдером поневоле согласишся с [livejournal.com profile] theiced, что дотнет делает толпа чертовых индусов под руководством упоротых менеджеров и аутичных хаскелистов.
Во-первых, чтобы EF заработал, нужно сгенерировать файлы маппинга, коих, внезапно 4 штуки: dbname.csdl,dbname.msl,dbname.ssql и dbname.ObjectLayer.cs
Во-вторых, чтобы их сгенерировать - нужно чтобы EdmGen.exe увидел провайдер, что само по себе вуду, с инсталляцией в GAC, регистрацией провайдера руками в machine.config (не работает в итоге) и дальнейшим прописыванием его явно в EdmGem.exe.config
В-третьих, чтобы к полученному бреду подключится, нужно указать строку коннекта для EntityConnection, в виде:
metadata=res://*/DBLINQTests.Resources.dbname.csdl|res://*/DBLINQTests.Resources.dbname.ssdl|res://*/DBLINQTests.Resources.dbname.msl;provider=FirebirdSql.Data.FirebirdClient;provider connection string='data source=fb;initial catalog=dbname;port number=3050;user id=SOMEUSER;password=SOMEPASS;charset=WIN1251'

Т.е. это одна строка коннекта- от ADO.NET провайдера, внутри другой - от Entity Framework, причем строка коннекта должна быть в одинарных кавычках :)

В-четвертых, генерируемый SQL выглядит душераздирающе:
SELECT 
1 AS "C1", 
"GroupBy1"."K1" AS "Document", 
"GroupBy1"."A1" AS "C2"
FROM ( SELECT 
    "Filter1"."K1" AS "K1", 
    COUNT("Filter1"."A1") AS "A1"
    FROM ( SELECT 
        "Extent1"."Document" AS "K1", 
        CAST(1 AS SMALLINT) AS "A1"
        FROM "Cells" AS "Extent1"
        WHERE "Extent1"."Document" < 1000
    )  AS "Filter1"
    GROUP BY "K1"
)  AS "GroupBy1"

Так и запишем: трансформацию не осилили.


В пятых: документации внятной нет. Блогпосты, баг-репорты в трекере Firebird и тому подобный неадекват.

[identity profile] d-e-n-o-m.livejournal.com 2012-02-10 10:11 pm (UTC)(link)
Есть еще bltoolkit. Правда он тоже firebird првайдер использует. Классы по базе генерить умеет. Интересно а рубишный для тулкит как с fb работает?

[identity profile] firebie.livejournal.com 2012-02-10 10:48 pm (UTC)(link)
Ну так у bltoolkit есть и Linq-провайдер: http://www.rsdn.ru/projects/rfd/linq/LinqWithBLToolkit.xml

[identity profile] theiced.livejournal.com 2012-02-10 10:56 pm (UTC)(link)
рубисты не используют файрбёрд. потому что у них ещё сохранилось чуть-чуть здравого смысла.

[identity profile] avnik.livejournal.com 2012-02-11 07:07 am (UTC)(link)
Блджад, ребе, у вас петон на юзерпике.

PS Лучше бы ребе метакласс таки аццким рубе баловался, там такого ада с коровниками нет (ну или петоном -- я вот гарантирую, что SA имеет все нужные фичи)

[identity profile] denisioru.livejournal.com 2012-02-11 05:44 am (UTC)(link)
BLToolkit охуенен когда классы простые и записей немного. Как только количество полей переваливает за десяток и записей за пару сотен - всё, пизда. И не дай бог ты вставишь custom mapping, тормоза будут ояибу. Проходили, нахуй.

[identity profile] firebie.livejournal.com 2012-02-12 12:27 pm (UTC)(link)
Активно юзамем BLToolkit на таблицах с количеством столбцов за пару десятков и сотнями тысяч рекордов - всё отлично и быстро работает. Как в старом виде, так и с использованием Linq Sql.

[identity profile] denisioru.livejournal.com 2012-02-12 02:24 pm (UTC)(link)
Поля geography есть?

[identity profile] firebie.livejournal.com 2012-02-15 07:56 pm (UTC)(link)
Так если затык именно на этих этом типе данных - религия не позволяет отписать автору про проблему (вместе с примером как воспроизвести) на http://www.rsdn.ru/forum/prj.rfd ?