如何获取当前数据库用户的默认架构名称

时间:2016-10-03 06:59:22

标签: c# sql-server entity-framework asp.net-mvc-4

如何获取连接字符串中声明的当前登录用户的模式名称?

我需要获取模式名称,因为WebSecurity.InitializeSimpleMembership使用当前登录用户的默认模式创建表。我需要将我的自定义UserProfile实体映射到创建的简单成员资格的用户配置文件。我不想重新创建简单的会员POCO。我只想分配自定义UserProfile实体的默认架构以匹配简单成员身份默认架构。

2 个答案:

答案 0 :(得分:1)

您可以尝试如下所示。这只是一个标准的代码段,您可以在其中获取连接字符串的架构详细信息。

using (var context = new MyContext())
{

    //retrieve object model
    ObjectContext objContext = ((IObjectContextAdapter)context).ObjectContext;

    //retrieve name types
    var nameTypes = objContext.MetadataWorkspace.GetItems<EntityType>(DataSpace.OSpace);

    //set a connection String 
    var connectionString = objContext.Connection.ConnectionString;
    var connection = new EntityConnection(connectionString);
    var workspace = connection.GetMetadataWorkspace();

    var entitySets = workspace.GetItems<EntityContainer>(DataSpace.SSpace).First().BaseEntitySets;

    for (int i = 0; i < nameTypes.Count; i++)
    {
        Type type = Type.GetType(nameTypes[i].FullName);
        string schema = entitySets[type.Name].MetadataProperties["Schema"].Value.ToString();   
    }
}

答案 1 :(得分:0)

我使用select schema_name()这将为我提供连接字符串中所述用户的默认架构。然后使用结果在其模型构建器中设置实体模式。