2011-11-29 75 views
1

在我正在處理的應用程序中,我基本上有一堆查找表,它們都包含兩項內容:ID(int)和Value(字符串)。設置DbContext映射到的表格

其中只有少數,但我想映射所有這些取決於表名稱的單個Context。喜歡的東西:

class LookupContext : DbContext 
{ 
    public DbSet<Lookup> Lookups { get; set; } 

    public LookupContext(String table) 
    { 
     // Pseudo code: 
     // Bind Lookups based on what table is 
     Lookups = MyDatabase.BindTo(table); 
    } 
} 

所以,如果我創建一個new LookupContext("foo"),它結合對foo表。如果我做new LookupContext("bar")它使用酒吧表,等等。

有沒有辦法做到這一點?或者我必須爲每個表格創建一個單獨的上下文+模型?

這或多或少是我第一次這樣做,所以我不確定我做的是對的。

回答

0

的答案,我們應該能夠給你的是使用枚舉,但是這並不提供相當,但 - 這是在EF的下一個版本。看到這裏的細節:http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx

與早期版本的EF,你可以簡單地創建每個查找值類(假設狀態爲例),並有一些代碼看起來像以下:

public class State 
{ 
    public int StateId {get;set;} 
    public string StateName {get;set;} 
} 

public class LookupContext : DbContext 
{ 
    public DbSet<State> States {get;set;} 
    // ... more lookups as DbSets 
} 

這將允許您使用一個上下文,但仍然需要每個表一個類。如果您希望表/列名分別與您的類/屬性名稱不同,也可以使用流暢的API。希望有所幫助!

0

我真的意識到我完全是在超越理性而複雜化的事情。沒有理由用兩列存儲多個表。

我最好保存我的數據爲:

public class LookupValue 
{ 
    public string LookupValueId { get; set; } 
    public string Value { get; set; } 
    public string LookupType { get; set; } 
} 

,其中第三場只是認爲,我以前在數據庫中存儲的表的名稱。

我仍然對將單個Context類映射到多個表的想法感興趣,但我相信上面描述的是完成我所需要的最不復雜的方法。