2

건배 모두,Entity Framework : 동적 연결 문자열 오류

저는 Entity Framework 모델을 사용하고 있습니다. 나는 응용 프로그램을 시동 할 때

namespace MyNamespace.Model 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public partial class MyEntities: DbContext 
    { 
     public MyEntities(string nameOrConnectionString) : base(nameOrConnectionString) 
     { 

     } 
    } 
} 

, 나는이 방법이 생성자를 호출, 그래서 참조 할 수 있습니다 : 나는 다른 파일에, 나는 (this question에서) 서면으로 작성했습니다, 매개 변수처럼 내 연결 문자열을 전달해야하므로 어쨌든에서 응용 프로그램이에 : mdlImpostazioni.SetConnectionString() 문자열 (데이터가 정확한지를) 반환

public static MyEntities dbContext = 
         new MyEntities(mdlImpostazioni.SetConnectionString()); 

는 :

server=192.168.1.100\SVILUPPO;database=MyDB;uid=myName;pwd=111111; 

이 코드를 실행

, 모든 것 같습니다 좋아,하지만 난 같은 쿼리를 만들려고 할 때 : 그것은 여기에서 예외가 발생

var query = (from r in MainWindow.dbContext.TabTipoSistema select r); 

:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    throw new UnintentionalCodeFirstException(); 
} 

말 :

추가 정보 : T4를 사용하여 생성 된 코드 코드 첫 번째 모드에서 사용하는 경우 데이터베이스 우선 및 모델 우선의 템플릿이 올바르게 작동하지 않을 수 있습니다. 데이터베이스 우선 또는 모델 우선을 계속 사용하려면 Entity Framework의 연결 문자열이 실행중인 응용 프로그램의 구성 파일에 지정되어 있는지 확인하십시오. 데이터베이스 우선 또는 모델 우선에서 생성 된 이러한 클래스를 코드로 사용하려면 먼저 특성 또는 API DbModelBuilder를 사용하여 추가 구성을 추가하고이 예외를 throw하는 코드를 제거하십시오.

스택 트레이스는 :

C에서 MyNamespace.Model.MyEntities.OnModelCreating (DbModelBuilder 모델 빌더)에

... \ 모델 \ Model.Context.cs : 25 행에 System.Data .Entity.DbContext.CallOnModelCreating System.Data.Entity에서 (DbModelBuilder 모델 빌더) System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder에 () System.Data.Entity.Internal.LazyInternalContext.CreateModel (LazyInternalContext internalContext)에 . Internal.RetryLazy`2.GetValue (TInput 입력) *

InnerException이 null입니다.

어디서 오류가 있습니까?

답변

0

나는 당신이 당신의 App.config 섹션

확실하지하지만 난 아닌 로컬 파일의 SQLServer를 사용하고 같은이 나를 위해 일을 업데이트해야합니다 생각합니다.

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="Data Source=MyServer; Integrated Security=True; MultipleActiveResultSets=True" /> 
    </parameters> 
</defaultConnectionFactory> 
2

생성자를 통해 엔터티 프레임 워크 6 connectionstring으로 단순한 connectionstring을 사용할 수 없습니다. 방금 ​​엔티티와 호환되는 것을 얻기 위해 다음 함수를 사용했습니다.

DONT FORGET 'YourDBModel'을 사용중인 모델로 변경하십시오.

/// <summary> 
    /// Returns an Entity Connectionstring ready to be used in a EF6 contructor 
    /// </summary> 
    /// <param name="connectionString">plain connectionstring</param> 
    /// <returns>entity connectionstring</returns> 
    public string GetEntityConnectionString(string connectionString) 
    { 
     var entityBuilder = new EntityConnectionStringBuilder(); 

     entityBuilder.Provider = "System.Data.SqlClient"; 
     entityBuilder.ProviderConnectionString = connectionString; 

     // -- WARNING -- 
     // Check your app config and set the appropriate DBModel (do not just let this be YourDBModel) 
     entityBuilder.Metadata = @"res://*/DB.YourDBModel.csdl|res://*/DB.YourDBModel.ssdl|res://*/DB.YourDBModel.msl"; 

     var ret = entityBuilder.ToString(); 

     return ret; 
    } 

당신은 또한 당신의 ConnectionString을에 다음을 추가 할 수 있습니다

entityBuilder.ProviderConnectionString = connectionString; + ";MultipleActiveResultSets=True;App=EntityFramework;"; 
관련 문제