Как получить имя схемы по умолчанию для текущего пользователя базы данных

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

#c# #sql-сервер #entity-framework #asp.net-mvc-4

Вопрос:

Как получить имя схемы для текущего пользователя, указанного в строке подключения?

Мне нужно получить имя схемы, потому что веб-безопасность.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();   
    }
}
  

Комментарии:

1. Даст ли это схему по УМОЛЧАНИЮ? Разве это не дало бы вам схему LAST BaseEntitySet на итерации?

2. он будет. B’cos этого: var connectionString = objContext.Connection.ConnectionString; .Если он отправляет правильное connection string , то результат правильный. @sachin

3. Пожалуйста, добавьте using директивы в свой код, потому что поиск правильных using директив нетривиален (есть альтернативы, которые определяют каждый используемый символ, но не работают вместе)

Ответ №2:

Я использую select schema_name() это, это даст мне схему по умолчанию для пользователя, указанного в строке подключения. Затем используйте результат для установки схемы сущности в ее построителе моделей.