2015-01-22 2 views
1

나는 내가 사용 등 엔티티 프레임 워크는 프로그램 연결 문자열 및 패키지 콘솔 관리자 Update-Database 또는 Add-Migration프로그래밍 연결 문자열

에 문제가 사용자가 필요에 따라 구성을 변경할 수 있도록 내 프로젝트의 파일은 configuration.xml입니다. 나는이 같은 결과를 얻었다 업데이트-Database 명령을 사용하려고하면

문제는

... 프로그래밍 방식의 연결 문자열입니다.

PM> Update-Database -Verbose 
Using StartUp project 'acme'. 
Using NuGet project 'acme'. 
Target database: 'acme.Models.DbContext' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention). 
Using Migrationens: [..., ..., ..., ..., ...]. 
Appending migration: .... 

데이터 소스가 .\SQLEXPRESS이 아닙니다. 예를 들어 My-SQLServer입니다.

연결 문자열입니다.

Data Source=My-SQLServer\TS;initial catalog=acme;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework 

원본 구성 설정 항목은 다음과 같습니다. DbContext는

<connectionStrings> 
    <!--<add name="DbContext" connectionString="Data Source=My-SQLServer\TS;initial catalog=acme;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework" providerName="System.Data.SqlClient" />--> 
</connectionStrings> 

...

using System; 
using System.Data; 
using System.Data.Entity.Core.Objects; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Linq.Expressions; 
using System.Collections.Generic; 
using System.Data.Entity.Core.Metadata.Edm; 
using System.Data.Entity.ModelConfiguration.Conventions; 
using System.Data.Entity.Core.EntityClient; 
using System.Data.Common; 
using System.Data.SqlClient; 

namespace acme.Models 
{ 
    public class DbContext : DbContext, IDbContextFactory<DbContext> 
    { 
     public DbContext(string nameOrConnectionString) 
      : base(nameOrConnectionString) 
     { 
      Database.SetInitializer<DbContext>(new MigrateDatabaseToLatestVersion<DbContext, acme.Migrations.Configuration>()); 
     } 

     public DbContext() 
      : base() 
     { 
      Database.SetInitializer<DbContext>(new MigrateDatabaseToLatestVersion<DbContext, acme.Migrations.Configuration>()); 
     } 

     public DbSet<Base> Base { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<User>().Map(m => m.MapInheritedProperties()); 

      base.OnModelCreating(modelBuilder); 
     } 

     public DbContext Create() 
     { 
      /* First try (not working) */ 
      EntityConnectionStringBuilder ecsb = new EntityConnectionStringBuilder(); 
      //ecsb.ProviderConnectionString = acme.ConfigFile.GetValue("ConnectionString"); 
      ecsb.Provider = "System.Data.SqlClient"; 
      ecsb.ProviderConnectionString = @"application name="; 

      /* Second try https://msdn.microsoft.com/en-us/library/bb738533%28v=vs.110%29.aspx (not working) */ 
      // Initialize the connection string builder for the 
      // underlying provider. 
      SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder(); 

      // Set the properties for the data source. 
      sqlBuilder.DataSource = @"My-SQLServer\TS"; 
      sqlBuilder.InitialCatalog = "acme"; 
      sqlBuilder.IntegratedSecurity = true; 
      sqlBuilder.MultipleActiveResultSets = true; 
      sqlBuilder.ApplicationName = "EntityFramework"; 

      // Build the SqlConnection connection string. 
      string providerString = sqlBuilder.ToString(); 

      // Initialize the EntityConnectionStringBuilder. 
      EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(); 

      //Set the provider name. 
      entityBuilder.Provider = "System.Data.SqlClient"; 

      // Set the provider-specific connection string. 
      entityBuilder.ProviderConnectionString = providerString; 

      return new DbContext(entityBuilder.ToString()); 
     } 
    } 
} 

난 당신이 날 도울 수 있기를 바랍니다 :) 사전에

감사합니다!

답변

1

나는 이것이 오래된 질문이라는 것을 알고있다. 하지만 같은 문제가 있습니다.

내 코드가 작동하는 데 사용되었지만 지금은 갑자기 그렇지 않습니다. 데이터베이스를 새 서버로 옮겼지만 100 % 아직이 서버를 사용하지 않았습니다. 어쨌든, 내 App.Config와 내 메인 웹 사이트의 Web.Config는 모두 올바른 연결 문자열을 가리키고 있습니다. . 그것은 제공을 요청할 수 있습니다

Add-Migration -ConnectionString "<connection string here>" 
Update-Database -ConnectionString "<connection string here>" 

: 그것은 그들을 무시하고 사용하고 왜 생각 \ SQLEXPRESS ...

어쨌든, 나는 그것이하여 올바른 연결 문자열 (임시 방편)를 사용하여 강제로 관리 않았다 이름, 내 경우에는 System.Data.SqlClient입니다.