2012-08-08 82 views
0

我先用代碼使用Entity Framework 4。我有一個模型,我希望能夠根據配置文件將此模型映射到數據庫中的不同表格。實體框架4代碼第一,使用相同的模型到多個表?

實施例模型:

public class Statistic 
{ 
    [Key] 
    public int id { get; set; } 
    public string jobName { get; set; } 
    public DateTime date { get; set; } 
    public int pages { get; set; } 
} 

每個客戶有已指定應使用的表名的配置文件。因此,每個客戶都應該在上面的模型中有自己的表格(在同一個數據庫中)。

我如何用Entity Framework 4做到這一點?

我在的DbContext嘗試這樣做:

modelBuilder.Entity<Statistic>().ToTable(tabelName); 

但是當我使用這是對現有的表的名稱更改爲新的表名,而不是創建和使用一個新的EF什麼呢。

謝謝!

回答

1

這是不可能的。每個映射集只能映射一個類(在常見情況下,每個上下文)。爲什麼?由於接入點數據庫是DbSet(或對象集ObjectContext的API中),並且簡單地創建這種方式:

var set = dbContext.Set<Statistics>(); 

應該如何EF知道應該使用哪個Statistics類的映射?它必須知道使用哪個映射來查詢正確的表並將更改保存到正確的表中。你可能會爭辯說,它可能被定義爲參數,但是會將外部的映射細節暴露給上層 - 這是不可取的。

編輯:

如果您的應用程序邏輯永遠需要訪問多個客戶的統計,你可以動態地創建每個客戶映射。您需要:

  • DbModelBuilder創建實例,並定義映射(或填充Configurations) - 在此步驟中,您會爲現有的客戶提供該表的名稱
  • 呼叫Build方法來獲得DbModel例如
  • 呼叫CompileDbModel實例獲取DbCompiledModel實例
  • 緩存編譯模型某處。模型編譯是昂貴的操作,每個客戶只需要執行一次(並且每次重啓應用程序)。
  • 通編譯模型DbContext構造和使用這方面的實例只爲客戶

訪問數據,如果需要爲多個客戶必須做到這一點通過SQL同時訪問數據。

+0

謝謝,我懷疑這是事實:) – Chriss 2012-08-09 07:07:12

相關問題