Entity Framework v4 Code-Only 连接字符串

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);
}

你能发布生成的字符串吗?或者在执行此代码时它已经崩溃了吗? - H H
@Henk:已添加连接字符串。 - jrista
2个回答

4

使用它:

var builder = new ContextBuilder<YourContext>();

using (YourContext context = builder.Create(new SqlConnection(ConfigurationManager.ConnectionStrings["yourConenctionKeyInWebConfig"].ConnectionString)))
{
     ...
}

谢谢。我知道ContextBuilder,但没有想到在我的EntityContext类的单元测试中使用它。我认为这将解决问题。谢谢! - jrista

3
据我了解,仅使用代码的方法无法通过将DB连接字符串简单地传递到其构造函数来实例化上下文。通常情况下,您需要使用ContextBuilder来创建您的上下文。
1. 在EntityContext类中定义一个带有EntityConnection参数的构造函数 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);

+1 很棒的答案。我先看了Gregoire的,然后标记为已接受。他们两个都回答了我的问题。谢谢! - jrista

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接