Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置DbContext映射到的表_C#_Entity Framework - Fatal编程技术网

C# 设置DbContext映射到的表

C# 设置DbContext映射到的表,c#,entity-framework,C#,Entity Framework,在我正在开发的一个应用程序中,我在一个数据库中有一组基本上是查找表,它们都包含两个内容:ID(int)和Value(string) 它们只有少数几个,但我想将它们全部映射到一个单独的上下文,这取决于表名。比如: class LookupContext : DbContext { public DbSet<Lookup> Lookups { get; set; } public LookupContext(String table) { //

在我正在开发的一个应用程序中,我在一个数据库中有一组基本上是查找表,它们都包含两个内容:ID(int)和Value(string)

它们只有少数几个,但我想将它们全部映射到一个单独的
上下文
,这取决于表名。比如:

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);
    }
}
class LookupContext:DbContext
{
公共数据库集查找{get;set;}
公共查找上下文(字符串表)
{
//伪代码:
//根据表是什么绑定查找
Lookups=MyDatabase.BindTo(表);
}
}
因此,如果我创建一个
新的LookupContext(“foo”)
,它将绑定到foo表。如果我使用
newlookupcontext(“bar”)
它将使用bar表,以此类推

有没有办法做到这一点?或者我必须为我拥有的每个表创建一个单独的上下文+模型吗

这或多或少是我第一次这样做,所以我不确定我所做的是否正确。

我们应该能给你的答案是使用enum,但这还不完全可用-它在EF的下一个版本中。详情请参见此处:

对于早期版本的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
}
公共类状态
{
public int StateId{get;set;}
公共字符串StateName{get;set;}
}
公共类LookupContext:DbContext
{
公共数据库集状态{get;set;}
//…作为数据库集进行更多查找
}

这将允许您使用一个上下文,但每个表仍需要一个类。如果希望表/列名分别与类/属性名不同,也可以使用fluent API。希望有帮助

事实上,我意识到我把事情复杂化了。没有理由用两列存储多个表

我最好将数据存储为:

public class LookupValue
{
    public string LookupValueId { get; set; }
    public string Value { get; set; }
    public string LookupType { get; set; }
}
其中第三个字段只是我以前存储在数据库中的表的名称

我仍然对将一个
上下文
类映射到多个表的想法感兴趣,但我相信我上面描述的是实现我所需要的最简单的方法