[c#] 코드 우선 DbContext에 연결 문자열 전달

엔터티 프레임 워크의 코드 우선 DbContext에 연결 문자열을 어떻게 전달합니까? 내 데이터베이스 생성은 web.config의 DbContext와 연결 문자열이 같은 프로젝트에 있고 이름이 같은 경우 올바르게 작동합니다. 하지만 이제 DbContext를 다른 프로젝트로 이동해야하므로 다음과 같이 연결 문자열을 테스트하고 있습니다.

모델 및 컨텍스트

public class Dinner
{
    public int DinnerId { get; set; }
    public string Title { get; set; }
}

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
        : base(connString)
    {
    }
    public DbSet<Dinner> Dinners { get; set; }
}

동작

    public ActionResult Index()
    {
        var db = new NerdDinners(ConfigurationManager.ConnectionStrings["NerdDinnerDb"].ConnectionString);

        var dinners = (from d in db.Dinners
                      select d).ToList();
        return View(dinners);
    }

Web.Config

<connectionStrings>
  <add name="NerdDinnerDb" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>

작업에서 중단 점을 설정하면 db, 연결 문자열이 있지만 데이터베이스 또는 아무것도 생성하거나 찾지 않습니다.

SQL Server에 대한 연결을 설정하는 동안 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스 할 수 없습니다. 인스턴스 이름이 올 바르고 SQL Server가 원격 연결을 허용하도록 구성되어 있는지 확인하십시오. (공급자 : 명명 된 파이프 공급자, 오류 : 40-SQL Server에 대한 연결을 열 수 없음)



답변

여기서 게임에 조금 늦었지만 다른 옵션은 다음과 같습니다.

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
    {
        this.Database.Connection.ConnectionString = connString;
    }
    public DbSet<Dinner> Dinners { get; set; }
}


답변

문서를 읽은 후 대신 연결 문자열의 이름을 전달해야합니다.

var db = new NerdDinners("NerdDinnerDb");


답변

“DbContext에 연결 문자열을 전달하는 방법”을 찾는 사람들을 위해이 비트를 추가 할 것이라고 생각했습니다. 기본 데이터 저장소에 대한 연결 문자열을 생성하고 전체 연결 문자열을 DbContext에서 파생 된 유형의 생성자에 전달할 수 있습니다. .

(@Lol Coder의 코드 재사용)
모델 및 컨텍스트

public class Dinner
{
    public int DinnerId { get; set; }
    public string Title { get; set; }
}

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
        : base(connString)
    {
    }
    public DbSet<Dinner> Dinners { get; set; }
}

그런 다음 SqlConnectioStringBuilder를 사용하여 다음과 같이 Sql 연결 문자열을 구성한다고 가정합니다.

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GetConnectionString());

GetConnectionString 메서드가 적절한 연결 문자열을 생성하고 SqlConnectionStringBuilder가 연결 문자열이 구문 적으로 올바른지 확인하는 경우; 그런 다음 db conetxt를 다음과 같이 인스턴스화 할 수 있습니다.

var myContext = new NerdDinners(builder.ToString());


답변

DbContext에서 DbContext에 대한 기본 생성자를 만들고 다음과 같이 기본을 상속합니다.

    public myDbContext()
        : base("MyConnectionString")  // connectionstring name define in your web.config
    {
    }


답변

앱 내에서 연결 문자열을 구성하는 경우 connString 명령을 사용합니다. 웹 구성에서 연결 문자열을 사용하는 경우. 그런 다음 해당 문자열의 “이름”을 사용합니다.


답변

그 문제에 대한 약간의 솔루션 예가 있습니다.

MyDBContext.cs

 public MyDBContext(DBConnectionType ConnectionType) //: base("ConnMain")
  {
      if(ConnectionType==DBConnectionType.MainConnection)
       {
         this.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnMain"].ConnectionString;
       }
      else if(ConnectionType==DBConnectionType.BackupConnection)
       {
         this.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnBackup"].ConnectionString;
       }
  }

MyClass.cs

public enum DBConnectionType
 {
    MainConnection=0,
    BackupConnection=1
 }

frmMyForm.cs

 MyDBContext db = new MyDBContext(DBConnectionType.MainConnection);
                               //or
//MyDBContext db = new MyDBContext(DBConnectionType.BackupConnection);


답변

web.config에서 연결 문자열의 구문을 확인하십시오. 다음과 같아야합니다.ConnectionString="Data Source=C:\DataDictionary\NerdDinner.sdf"