我已经使用多个模式定义了一个数据库,每个模式都有完全相同的表和关系(我们需要根据要加载的项目来分离数据库)。 我使用EF6向导和DB(DB First)中的EF Designer选项,选择连接后,我可以选择表格,视图等:
如果我在这里只选择一个包含其所有表的模式(即:P08590),那么该模型包含的实体将仅CRUD来自这种模式的表(显然)。 问题是我需要根据登录到一个项目来从不同的模式中获取CRUD数据。 在阅读和谷歌搜索后,我发现你可以告诉一个类通过它引用的表和模式的属性:
[Table("P08590.ACTIVITIES")]
public partial class ACTIVITy
{
...
}
所以我提出了在登录应用程序后存储某种全局变量的想法:
[Table("ACTIVITIES", Schema = globalVariable)]
public partial class ACTIVITy
{
...
}
但是将变量传递给属性是不可行的。是否有任何可能的方法来实现这种行为?
答案 0 :(得分:0)
如果您不想使用数据注释,可以使用流畅的API ...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ActivityClass1>().ToTable("Activities", schemaVariable);
}
答案 1 :(得分:0)
codeplex上的此适配器将帮助您实现此目标。
毫无疑问,您必须稍微调整一下代码
要使用此适配器,您必须将上下文类转换为部分类,并从AdaptingObjectContext
继承它,如
public partial class MyObjectContext : BrandonHaynes.ModelAdapter.EntityFramework.AdaptingObjectContext
{
public MyObjectContext()
: base(myConnectionString,
new ConnectionAdapter(
new TableSchemaModelAdapter("myschema"),
System.Reflection.Assembly.GetCallingAssembly()))
{
...
}
}
有关详情,请点击此blog
修改强>
由于DbContext取代了ObjectContext(DbContext作为ObjectContext的包装器),我们仍然可以使用此解决方案构造DbContext并使用该组件的所有功能。您只需以为此工具定义的方式构造对象,然后使用Repository(或其他位置)中的ObjectContext创建DbContext。
要实现这一点,您可以按照MSDN和StackOverflow上的好回复