#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
, то результат правильный. @sachin3. Пожалуйста, добавьте
using
директивы в свой код, потому что поиск правильныхusing
директив нетривиален (есть альтернативы, которые определяют каждый используемый символ, но не работают вместе)
Ответ №2:
Я использую select schema_name()
это, это даст мне схему по умолчанию для пользователя, указанного в строке подключения. Затем используйте результат для установки схемы сущности в ее построителе моделей.