2012-02-17 43 views
1

我想EF如何修改其他程序集中已映射實體的映射?

例如,對於實體定義映射,我有一個實體:在OnModelCreating

public class User 
{ 
    public int UserId { get;set;} 
    public string Firstname { get;set;} 
    public string ColA {get; set;} 
    public string ColB {get; set;} 
} 

它已經加入映射()在EF普遍使用。如果我在2個獨立程序集中有2個函數,請調用AssemblyA.dll和AssemblyB.dll,它們由MEF框架動態加載。

AssemblyA.dll只是需要ColA,並且必須爲AssemblyB.dll刪除ColB,反之亦然,所以我需要爲這兩個服務定義2個新的映射類,並且它將動態運行以根據其組件移除列(AssemblyA將忽略ColB,並且AssemblyB忽略ColA)。我不想修改當前EF的代碼,因爲它已經在生產。每個組件的所有更改都應該是自己的。

EF是否支持我們這樣做?或者你可以給我一個方向。

+0

不知道我是否明白_mapping_的含義。你可以包含你的'OnModelCreating()'代碼嗎? – 2012-02-17 09:49:38

回答

0

這不是很清楚你正在嘗試做的,但:

  • 每個EF方面可以有每個表和實體映射只有一次
  • 如果您AssemblyA你不能使用配置加載配置這意味着對於AssemblyB
  • 這也意味着您不能使用默認方式如何在OnModelCreating內構建EF映射,因爲該方法在整個應用程序生命週期中通常只調用一次。
  • 您可以手動構造兩個DbModel insnaces,他們編譯爲DbCompiledModel並傳遞給DbContext構造 - 應該讓你有兩個不同的映射配置AssemblyA和AssemblyB但你永遠不會有兩個人在同一個上下文實例。
  • EF遷移將很可能不工作,因爲他們希望每一個數據庫映射集合

無論如何,如果你正在使用MEF和模塊化架構的每個實體應當是核心(不涉及任何特定的模塊和共享如模塊之間)或模塊(未被任何其他模塊或核心使用)。

+0

謝謝拉迪斯拉夫,你能給我更多關於項目3(你告訴使用DbCompileModel)嗎?此外,有什麼方法可以實現我的想法? – thanhauco 2012-02-17 17:24:30