2012-02-27 172 views
1

是否有一種簡單的方法可以在調試模式下公開ObjectContext和發佈模式下的內部?ObjectContext在調試模式下公開,在發佈模式下內部

使用Linqpad連接ObjectContext進行快速測試和查詢非常方便,因此爲了開發目的,我希望它是公開的。但我不想考慮將相同的便利部署到某個智能客戶的後果。

+1

智能客戶可以使用Reflector。並不是說我批准在生產中公開ObjectContext - 只是將它放在內部可能無法解決您的問題。 – 2012-02-27 08:42:44

回答

2

正如評論所說,這可能不是什麼實際用途,但:

#if DEBUG 
public 
#endif 
class YourContext : ObjectContext 
{ 
    ... 
} 

當與產生ObjectContext從.edmx文件打交道時,你需要自定義如何生成C#文件。默認值不是可自定義的,但設計者可以選擇「添加代碼生成項」。如果你使用這個,你會得到幾個選擇。我使用的是「ADO.NET自我跟蹤實體生成器」,但同樣的方法適用於所有人。選擇此項將向模型文件添加兩個模板文件(Model.tt和Model.Context.tt),您可以根據自己的需要自由修改它們。對於您所要求的修改,您會在Model.Context.tt文件中找到<#=Accessibility.ForType(container)#> partial class。您可以更新它,以便它可以讀取

#if DEBUG 
<#=Accessibility.ForType(container)#> 
#endif 
partial class 
+0

對不起,我應該提到我指的是model-first(添加標籤)。所以我正在處理一個生成的edmx文件。我無法添加部分類,因爲它不能具有不同的訪問修飾符。無論如何+1,因爲它會以代碼優先的方式工作。 – 2012-02-27 08:56:04

+0

@GertArnold您可以使用T4模板來自定義生成的類,並修改該模板以在結果中包含任何您想要的內容,包括預處理器指令。 – hvd 2012-02-27 09:01:59

+0

我不太熟悉(還)。你可以參考一些來源? – 2012-02-27 09:03:05

0

Preprocessor directive

# if(DEBUG) 
     public ObjectContext _context; 
# else 
     internal ObjectContext _context; 
#endif 
+0

不,我的意思是課程本身,而不是我使用的每個實例。 – 2012-02-27 08:49:51

+0

同樣可以應用於課堂,就像@hvd在他的回答中所述。 – 2012-02-27 08:50:49

相關問題