Как я могу получить значение свойства Namespace из ConceptualEntityModel во время выполнения? - PullRequest
3 голосов
/ 27 сентября 2010

Я использую C #, Visual Studio 2010 и Entity Framework 4. У меня есть сборка, которая содержит несколько моделей сущностей. Требования проекта таковы, что я не храню никакой информации о соединении в app.config.

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

public static string GetEntityConnectionString(string modelName)
{
    const string providerName = "somedatabaseprovider";
    string metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", modelName);

    EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder
    {
        Provider = providerName,
        ProviderConnectionString = GetProviderConnectionString(),
        Metadata = metadata
    };

    return entityBuilder.ToString();
}

Теперь я хочу сделать это немного более пуленепробиваемым, передав тип модели сущности вместо литеральной строки для имени модели. Когда я редактирую модель сущности в Visual Studio, окно свойств для MyModel (типа ConceptualEntityModel) содержит свойство с именем «Имя контейнера сущностей», которое показывает MyEntities, и другое свойство с именем «Пространство имен», которое показывает MyModel.

Во время разработки у меня есть доступ к типу MyEntities. Как получить значение, хранящееся в свойстве «Пространство имен» ConceptualEntityModel во время выполнения?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2011

Это приходит на несколько месяцев позже, но я поставил эту идею на обсуждение. Я получил свойство пространства имен Концептуальной модели сущности от любой из сущностей (таблиц) в модели следующим образом:

string namespaceName = EDMInstance.Entity.EntitySet.ElementType.NamespaceName;

Итак, у меня есть модель данных сущности под названием «NITESMOVE_EDM», содержащая сущность «NM_PATHS», и я создаю строку расположения метаданных сущности следующим образом:

// create an instance of the Data Model 
NITESMOVE_EDM EDMinst = new NITESMOVE_EDM();

// create a connection string builder
System.Data.EntityClient.EntityConnectionStringBuilder entityBuilder = new System.Data.EntityClient.EntityConnectionStringBuilder();

// Set the Metadata location, by querying an Entity in the model
entityBuilder.Metadata = string.Format(@"res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", EDMinst.NM_PATHS.EntitySet.ElementType.NamespaceName);

Это может быть полезно в сочетании с советом, данным здесь: MSDN Как: создать строку подключения EntityConnection

0 голосов
/ 27 сентября 2010

Ну, если ваша цель сделать это "пуленепробиваемым", это не сработает.Строка, которую вы называете modelName, на самом деле не название модели, а имя ресурса.В вашем случае это совпадает с названием модели, но , что не всегда верно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...