2016-10-03 65 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()這會給我在連接字符串中聲明的用戶的默認模式。然後使用結果在其模型構建器中設置實體模式。