2016-10-03 78 views
2

如何获取连接字符串中指定的当前登录用户的模式名称?如何获取当前数据库用户的默认模式名称

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

+1

不知道我知道你在问什么,但'select schema_name()'从查询中给出了默认的模式名称。 –

回答

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(); 
    } 
} 
+0

这会给DEFAULT架构?它不会在迭代中为您提供LAST BaseEntitySet的架构吗? – sachin

+0

他将这样做:'var connectionString = objContext.Connection.ConnectionString;'。如果他发送正确的'连接字符串',那么结果是正确的。 @sachin – Sampath

0

我使用select schema_name()这会给我在连接字符串中声明的用户的默认模式。然后使用结果在其模型构建器中设置实体模式。