Платформа объекта v4 Строка подключения Только для кода

Я недавно начал пользоваться библиотекой EF v4 библиотекой Code Only для некоторых проектов, я продолжаю работать. Однако я столкнулся с чем-то вроде препятствия. Я, может казаться, не выясняю соответствующий формат для строки подключения. Я использовал следующий код создать строку подключения:

string connectionString = new EntityConnectionStringBuilder
{
    Provider = "System.Data.SqlClient",
    ProviderConnectionString = new SqlConnectionStringBuilder
    {
        DataSource = "localhost",
        InitialCatalog = "ASM_Testing",
        IntegratedSecurity = true,
        Pooling = false
    }.ConnectionString
}.ConnectionString;

Однако использование его приводит к следующей ошибке:

Specifications_for_EntityContext.When_logging_in_application_with_valid_app_role_and_password.Login_should_be_successful : System.ArgumentException : Some required information is missing from the connection string. The 'metadata' keyword is always required.
Stack Trace:
   at System.Data.EntityClient.EntityConnection.ValidateValueForTheKeyword(DbConnectionOptions effectiveConnectionOptions, String keywordName)
   at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
   at System.Data.Objects.ObjectContext..ctor(String connectionString)
   at ASM.Data.EntityContext..ctor(String connectionString) in C:\Users\Jon Rista\TFS\Advanced Service Management\Trunk\Main\Source\ASM.Data\EntityContext.cs:line 16
   at Specifications_for_EntityContext.Behaves_like_EntityContext_connected_to_a_database.TestableEntityContext..ctor(String connectionString) in C:\Users\Jon Rista\TFS\Advanced Service Management\Trunk\Main\Source\Tests.ASM.Data\EntityContextFacts.cs:line 165
   at Specifications_for_EntityContext.Behaves_like_EntityContext_connected_to_a_database.InitializeContext() in C:\Users\Jon Rista\TFS\Advanced Service Management\Trunk\Main\Source\Tests.ASM.Data\EntityContextFacts.cs`e`enter code here`nter code here`:line 160
   at ASM.Testing.xUnit.ObservationCommand.Execute(Object testClass) in C:\Users\Jon Rista\TFS\Advanced Service Management\Trunk\Main\Source\ASM.Testing.xUnit\ObservationCommand.cs:line 24
   at Xunit.Sdk.FixtureCommand.Execute(Object testClass)
   at Xunit.Sdk.BeforeAfterCommand.Execute(Object testClass)
   at Xunit.Sdk.LifetimeCommand.Execute(Object testClass)
   at Xunit.Sdk.TimedCommand.Execute(Object testClass)
   at Xunit.Sdk.ExceptionAndOutputCaptureCommand.Execute(Object testClass)

Наблюдение, поскольку у меня нет метаданных..., так как я использую Код Только, я нахожусь в чем-то вроде, связывают. Любое понимание значительно ценится.

Строка подключения, сгенерированная классами разработчика, следующие:

provider=System. Данные. SqlClient; строка подключения поставщика = "Данные Source=localhost; Начальный Catalog=ASM_Testing; Интегрированный Security=True; Pooling=False"


Рабочий Пример (на основе принятых ответов)

Необходимо использовать ContextBuilder для создания любого экземпляра контекста, который использует режим только для кода. Вот рабочий пример этого для тех, кто ищет решение той же проблемы:

protected override void InitializeContext()
{
    string connectionString = new SqlConnectionStringBuilder
    {
        DataSource = "localhost",
        InitialCatalog = "Testing",
        IntegratedSecurity = true,
        Pooling = false
    }.ConnectionString;

    var connection = new SqlConnection(connectionString);
    var builder = new ContextBuilder<TestableEntityContext>();
    m_context = builder.Create(connection);
}
6
задан jrista 11 July 2010 в 02:00
поделиться

2 ответа

Для использования:

var builder = new ContextBuilder<YourContext>();

using (YourContext context = builder.Create(new SqlConnection(ConfigurationManager.ConnectionStrings["yourConenctionKeyInWebConfig"].ConnectionString)))
{
     ...
}
4
ответ дан 17 December 2019 в 00:02
поделиться

Насколько я понимаю, используя подход code only, вы не можете инстанцировать контекст, просто передав строку подключения к DB его ctor. Обычно для создания контекста используется ContextBuilder.

  1. Определяем ctor, принимающий EntityConnection в EntityContext class

    public EntityContext(EntityConnection connection): base(connection) { }

  2. Создаем соединение

    var factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); var connection = factory.CreateConnection(); connection.ConnectionString = providerConnectionString;

  3. Используйте ContextBuilder для создания нового контекста

    var contextBuilder = new ContextBuilder(); contextBuilder.Configurations.Add(...) var context = contextBuilder.Create(connection);

3
ответ дан 17 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: