Entity framework 4 实体框架4代码首先,对多个表使用相同的模型?

Entity framework 4 实体框架4代码首先,对多个表使用相同的模型?,entity-framework-4,Entity Framework 4,Im首先使用实体框架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; } } 每个客户都有一个配置

Im首先使用实体框架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; }
}
每个客户都有一个配置文件,其中指定了应使用的表名。因此,每个客户都应该使用上面的模型拥有自己的表(在同一数据库中)

如何使用实体框架4实现这一点

我在我的DbContext中尝试了这一点:

modelBuilder.Entity<Statistic>().ToTable(tabelName);
modelBuilder.Entity().ToTable(tabelName);
但是当我使用它时,EF所做的是将现有的表名更改为新的表名,而不是创建和使用新的表名


谢谢

这是不可能的。每个类在每个映射集只能映射一次(在常见情况下,每个上下文)。为什么?因为数据库的访问点是一个数据库集(或ObjectContext API中的ObjectSet),它的创建方式很简单:

var set = dbContext.Set<Statistics>();
var set=dbContext.set();
EF如何知道应该使用
统计数据
类的哪个映射?它必须知道使用哪个映射来查询正确的表并将更改保存到正确的表。您可能会争辩说,它可以定义为参数,但这会将映射细节暴露在上层之外——这是不可取的

编辑:

如果您的应用程序逻辑从不需要访问多个客户的统计信息,那么您可以动态地为每个客户创建映射。你需要:

  • 创建
    DbModelBuilder
    的实例,并定义映射(或填写
    Configurations
    )-在此步骤中,您将为当前客户提供表的名称
  • 调用
    Build
    方法获取
    DbModel
    实例
  • DbModel
    实例上调用
    Compile
    ,以获取DbCompiledModel实例
  • 将编译后的模型缓存到某处。模型编译是一项昂贵的操作,您只需要为每个客户(以及每次应用程序重新启动)编译一次
  • 将编译后的模型传递给
    DbContext
    构造函数,并使用该上下文实例仅访问该客户的数据

如果您需要同时访问多个客户的数据,则必须通过SQL进行访问。

谢谢,我怀疑是这样的:)