我實際上處理了這個問題,因爲我的項目的源代碼樹沒有正確設置來運行Entity Framework的構建任務,該任務生成並在輸出dll中嵌入資源。
我調查了以下選項:
使用EntityDeploy MSBuild任務
如果您在記事本中打開.csproj的文件,你會看到一個XML有點像
<EntityDeploy Include="MyEntities.edmx">
<Generator>EntityModelCodeGenerator</Generator>
<LastGenOutput>MyEntities.Designer.cs</LastGenOutput>
</EntityDeploy>
這是使用的msbuild任務Microsoft.Data.Entities.Build.targets和Microsoft.Data.Entities.Build.dll讀取edmx文件,生成ssdl,csdl和msl文件,然後將它們嵌入到目標dll中。 (這些文件可以在C:\ Windows \ Microsoft.NET \ Framework \ v3.5中找到)。
使用EdmGen
克雷格指出的那樣,你也許能夠使用EdmGen.exe所附帶的框架。我放棄了這一步,但是我已經對我的edmx文件中的數據進行了一些定製,並且EdmGen.exe似乎真的想從原始數據庫中進行初始生成。
使用EdmGen2
EdmGen2.exe是一個開源項目,它確實比EdmGen多一點。我最終使用它來生成ssdl,csdl和msl文件。您可以將它指向您的edmx文件,它將生成必需的ssdl,csdl和msl文件。然後我包括這一起我的DLL和修改連接字符串從
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|res://*/MyEntities.msl;
到
connectionString="metadata=./MyEntities.csdl|./MyEntities.ssdl|./MyEntities.msl;
注意我說的是實體框架,這些文件在同一目錄中我的DLL,不嵌入作爲資源。
所有這三個,構建任務,EdmGen和EdmGen2都是很薄的包裝器,它們爲所有困難的東西調用System.Data.Entity.dll。作爲最後的手段,你可以在構建任務dll的反射器中看看它在做什麼。
希望這會有所幫助。