2013-08-19 47 views
1

我試圖在Oracle數據庫上使用實體框架和Model-First。我從文件ODTwithODAC1120320_32bit.zip安裝了ODP.NET和Oracle Visual Studio工具,該文件的版本號爲11.2.0.3.20實體框架Model-First和Oracle

我做了一個小測試模型,將連接字符串設置爲Oracle DB,將模型的代碼生成模板更改爲Generate Oracle via T4 (TPT).xamlSSDLToOracle.tt。代碼代工作,但生成的SQL是不可用:

CREATE TABLE "dbo"."Entity1Set" (
    "Id" UNIQUEIDENTIFIER NOT NULL, 
    "NvarcharProperty" NVARCHAR(MAX) NOT NULL 
); 

無論UNIQUEIDENTIFIER也不NVARCHAR是有效的Oracle關鍵字。此外,Oracle處理模式的方式與SQL Server不同,所以"dbo".的東西不起作用。

你通常如何處理?每代碼生成後更改SQL?

是否有其他方式使用EF與Oracle和Model-First?

+0

根據[Oracle的教程](http://download.oracle.com/oll/obe/EntityFrameworkOBE/EntityFrameworkOBE.htm),您必須在Model First中執行以下操作_「爲DDL生成模板選擇SSDLtoOracle.tt 。確保在數據庫生成工作流屬性中選擇通過T4生成Oracle(TPT).xaml以確保生成每個類型DDL的表。「_。 – Ben

+1

從這個問題看來,你已經完成了Ben提出的步驟。我會說這是Oracle工具的一個問題... –

+1

您確定您不是SSDLToOracle.tt針對Sql Server生成的模型嗎?您可以從您的edmx文件(具有'Provider'和'ProviderManifestToken'屬性的部分)粘貼商店模型 - .tt可能會盲目地爲其StoreItemCollection生成代碼,即使StoreItemCollection是爲其他數據庫創建的。 – Pawel

回答

2

看起來您的模型是從SqlServer生成的,然後傳遞給SSDLToOracle.tt。 SSDLToOracle.tt文件可能不會檢查它是否真正處理Oracle特定的StoreItemCollection,而只是使用它得到的結果生成使用SqlServer類型的Oracle特定SQL的混合。您可以通過打開edmx文件並檢查ProviderProviderManifestToken屬性來檢查生成模型的數據庫。