6

私は最近、取り組んでいるいくつかのプロジェクトで 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.Data.SqlClient;provider connection string="Data Source=localhost;Initial Catalog=ASM_Testing;Integrated 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);
}
4

2 に答える 2

4

使用するには:

var builder = new ContextBuilder<YourContext>();

using (YourContext context = builder.Create(new SqlConnection(ConfigurationManager.ConnectionStrings["yourConenctionKeyInWebConfig"].ConnectionString)))
{
     ...
}
于 2010-07-10T20:38:13.217 に答える
3

コードのみのアプローチを使用して理解している限り、DB接続文字列をctorに渡すだけではコンテキストをインスタンス化できません。通常ContextBuilder、コンテキストを作成するために使用します。

  1. EntityConnectionクラスで取得するEntityContextクラスを定義する

    public EntityContext(EntityConnection 接続): base(接続) { }

  2. 接続を作成

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

  3. ContextBuilder新しいコンテキストの作成に使用

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

于 2010-07-10T20:33:08.337 に答える