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] metaclass.livejournal.com 2012-02-10 09:39 pm (UTC)(link)
Маппинги и классы из базы импортировать можно?

[identity profile] madeveloper.livejournal.com 2012-02-10 10:11 pm (UTC)(link)
Маппинги на лету легко. Классы - ну если сборку в блоб...