엔터티 프레임 워크의 코드 우선 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"