【问题标题】:Entity Framework v4 Code-Only Connection StringEntity Framework v4 纯代码连接字符串
【发布时间】:2011-03-14 04:34:29
【问题描述】:

我最近开始在我正在处理的一些项目中使用 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)

鉴于我没有任何元数据...因为我使用的是纯代码,所以我有点束手无策。非常感谢任何见解。

builder类生成的连接字符串如下:

provider=System.Data.SqlClient;provider 连接字符串="数据 源=本地主机;初始 目录=ASM_Testing;集成 安全=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);
}

【问题讨论】:

  • 你能发布结果字符串吗?还是在执行这段代码时它已经爆炸了?
  • @Henk:添加了连接字符串。

标签: c# entity-framework-4 code-first


【解决方案1】:

使用它:

var builder = new ContextBuilder<YourContext>();

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

【讨论】:

  • 谢谢。我知道 ContextBuilder,但我并没有想到在我的 EntityContext 类的单元测试中使用它。我认为这将解决问题。谢谢!
【解决方案2】:

据我了解,仅使用代码方法无法通过简单地将 DB 连接字符串传递给其 ctor 来实例化上下文。通常你会使用ContextBuilder 来创建你的上下文。

  1. EntityContext 类中定义采用EntityConnection 的ctor

    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 的文章,并将其标记为已接受。不过,他们俩都回答了我的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2018-05-08
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多