我们的数据库是以这样的方式设计的,其中有各种用于生产的模式和用于测试的各种等效模式。例如,许多表位于MyProduction架构中,而相同的表位于MyTest架构中。
我想要做的是确定一个表正在使用哪个模式,所以我知道要将哪个模式更改为。因此,默认情况下,所有内容都将位于生产模式下。在DbContext的OnModelCreating事件中,如果我需要指向test(由某些true / false配置确定),我需要确定正在使用的生产模式,然后将其指向它的测试等效项。
我已经知道如何设置架构但无法找到如何获取它。任何想法我如何确定表正在使用的架构?
谢谢。
答案 0 :(得分:0)
根据您的本地设置修改后尝试以下代码:
var context = new YouDbContext("ConnectionName");
var adapter = (IObjectContextAdapter)context;
var objectContext = adapter.ObjectContext;
EntitySetBase schema = null;
if (objectContext.MetadataWorkspace != null)
{
schema = objectContext.MetadataWorkspace
.GetItems<EntityContainer>(DataSpace.SSpace).First()
.BaseEntitySets
.First(meta => meta.ElementType.Name == "ClassNameUnderYourDbContext");
}
//See the properties of schema in debug mode to understand details
答案 1 :(得分:-1)
实体框架模式是System.ComponentModel.DataAnnotations.TableAttribute对象。以下是一些可用于获取权限的架构名称和表名称的方法。干杯!
private string GetTableName(Type type)
{
var tableAttribute = type.GetCustomAttributes(false).OfType<System.ComponentModel.DataAnnotations.TableAttribute>().FirstOrDefault();
if (tableAttribute != null && !string.IsNullOrEmpty(tableAttribute.Name))
{
return tableAttribute.Name;
}
else
{
return string.Empty;
}
}
private string GetTableSchema(Type type)
{
var tableAttribute = type.GetCustomAttributes(false).OfType<System.ComponentModel.DataAnnotations.TableAttribute>().FirstOrDefault();
if (tableAttribute != null && !string.IsNullOrEmpty(tableAttribute.Schema))
{
return tableAttribute.Schema;
}
else
{
return string.Empty;
}
}
答案 2 :(得分:-1)
System.ComponentModel.DataAnnotations.Schema.TableAttribute