2011-11-29 73 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类映射到多个表的想法感兴趣,但我相信上面描述的是完成我所需要的最不复杂的方法。