Entity framework 4 实体框架4代码首先,对多个表使用相同的模型?
Im首先使用实体框架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; } } 每个客户都有一个配置
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进行访问。谢谢,我怀疑是这样的:)