하나의 엔티티 프레임 워크 객체가 있고 프로젝트에 connectionstring
추가 app.config
하면 connectionstring
섹션에 추가 되지만 새 객체 를 만들고 entitycontext
이것을 사용 하려고하면 connectionstring
이 오류가 나타납니다.
하나의 엔티티 프레임 워크 객체가 있고 프로젝트에 connectionstring
추가 app.config
하면 connectionstring
섹션에 추가 되지만 새 객체 를 만들고 entitycontext
이것을 사용 하려고하면 connectionstring
이 오류가 나타납니다.
답변:
솔루션에 두 개 이상의 프로젝트가 있고 edmx
파일 을 포함하여 엔티티 프레임 워크 항목이 포함 된 프로젝트가 솔루션의 시작 프로젝트 가 아니라는 사실에서 문제가 발생했다고 생각합니다 . 이 경우 EF app.config
프로젝트 에 연결 문자열이 있어도 런타임시 CLR에서 찾을 수 없습니다. 예를 들어 솔루션에 웹 사이트 및 EF 프로젝트가있는 경우 EF 프로젝트 파일 에서 연결 문자열을 복사하고 해당 표면을 마우스 오른쪽 단추로 클릭하고 특성을 선택한 후 연결 문자열을 복사하여 연결 문자열에 붙여 넣어야합니다. 부분. 이렇게하면 구성에 올바른 것을 가지고 있는지 확인할 수 있습니다.
편집 : ObjectContext 생성자의 Documenation에서
여기에서 볼 수 있듯이
app.config
귀하의 웹 사이트에 web.config
. 기본적으로 모든 연결 문자열 데이터는 .Net 스레드가 CLR (예 : 시작 프로젝트)에서 시작한 프로젝트의 구성 파일에 있어야합니다. 이것이 귀하의 경우가 아닌 경우에는edmx
app.config
첫 번째 매개 변수는 EDM을 만들 때 생성 된 코드 인 연결 이름입니다. 연결 문자열 이름의 이름이 변경되면 모델을 마우스 오른쪽 단추로 클릭하고 "데이터베이스에서 모델 업데이트 ..."를 선택한 다음 마법사를 따라 confing 및 designer를 업데이트하여이를 반영하십시오. 변화.
app.config의 연결 문자열을 web.config에 복사하거나 전체 파일을 프로젝트에 복사하여 출력을 표시해야합니다. 프레임 워크를 소비하는 조건 중 하나입니다.
솔루션의 여러 프로젝트에서 사용하기 위해 사용자 지정 데이터베이스 논리를 .dll에 넣으려고 할 때이 문제가 발생했습니다.
.dll에 올바른 app.config 파일이 있지만 작동하지 않았습니다. 엔터티 프레임 워크는 .exe의 app.config에 연결 정보를 원했습니다. 거기에 정보를 복사하는 것은 잘 작동했습니다.
연결 문자열을 .edmx에 직접 붙여 넣는 Morteza의 솔루션은 값을 붙여 넣을 수 없기 때문에 효과가 없었습니다.
안녕 나는이 문제가 있었고 그것은 나를 미치게했다. 어쨌든 마침내 문제가 무엇인지 알아 냈습니다. 가장 먼저해야 할 일은 connectionstrings
in app.config
과 같은지 확인하는 것 입니다 web.config
. 그런 다음 .edmx
파일을 두 번 클릭 하여 테이블을 볼 수 있습니다. 일단 테이블 근처가 아닌 테이블 근처의 아무 곳이나 클릭하면 속성으로 이동합니다. 드롭 다운 목록에서ConceptualEntityModel
엔티티 컨테이너 이름을 검색하고 잘 기억하십시오.
그런 다음 edmx 파일의 디자이너로 이동하여 생성자를 엽니 다. (디자이너는 edmx 파일의 하위 폴더입니다.) 생성자는 BASE 매개 변수에 두 개의 매개 변수가 있어야합니다
public DBEntities() : base("name=DBEntities", "DBEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
이것은 그들 중 하나입니다. 첫 번째 매개 변수는 파일이있는 프로젝트 파일의 이름을 가져야합니다 .edmx
. 두 번째 매개 변수는 앞에서 언급 한 특성의 엔티티 컨테이너 이름을 가져야합니다. 모든 생성자를 다음과 같이 정렬하는 것을 잊지 마십시오.base("", "")
그게 내 문제 였고 내 문제는 그렇게 해결되었습니다. 나는 당신이 이것처럼 당신을 해결할 수 있기를 바랍니다.
나는 아무도 다루지 않는 것처럼 이것에 변형을 가졌습니다.
몇 가지 모델이 포함 된 기본 프로젝트와 단위 테스트가 포함 된 테스트 프로젝트가있었습니다. 테스트 프로젝트가 작동했지만 OP에 언급 된 오류로 중지되었습니다. EDMX 파일의 이름을 바꾸거나 이동하지 않았습니다.
많은 조언은 .config 파일 비교에 대해 언급했지만 내 프로젝트에는 전혀 없었습니다.
결국 app.config 파일을 기본 프로젝트에서 내 테스트 프로젝트로 복사 한 다음 작동했습니다. 이것이 올바른 단계인지 또는 추가 모델을 추가 할 때 유지 관리 성 문제가 있는지 여부는 모르겠지만 적어도 현재 단위 테스트가 다시 올바르게 실행되고 있습니다.
Morteza Manavi의 답변 으로이 문제를 해결할 수 있지만 다른 해결 방법은 연결 문자열을 동적으로 작성하여 ObjectContext의 생성자에 전달하는 것입니다.
public static string CreateConnectionString()
{
var assemblyPath = Assembly.GetExecutingAssembly().Location;
string assemblyLocation = Path.GetDirectoryName(assemblyPath);
string dbPath = Path.Combine(assemblyLocation, "YourDatabase.sdf");
var sqlBuilder = new SqlConnectionStringBuilder { DataSource = dbPath };
var entityBuilder = new EntityConnectionStringBuilder
{
ProviderConnectionString = sqlBuilder.ConnectionString,
Provider = "System.Data.SqlServerCe.3.5",
Metadata = @"res://*/YourModel.csdl|
res://*/YourModel.ssdl|
res://*/YourModel.msl"
};
return entityBuilder.ToString();
}
// Snip...
var entityContext = new YourObjectContext(CreateConnectionString());
따라서 적어도 내 경우에는 바람직하지 않은 시작 프로젝트의 app.config에 연결 문자열 정보를 복사 할 필요가 없습니다.
방금 VS2010의 IIS에서 응용 프로그램을 만들면 웹 사이트 루트의 두 가지 수준 에서이 오류가 발생한다는 것을 알았습니다. 왜 그런지 잘 모르면 더 조사해야합니다. 예를 들어 앱이이 경로에 /admin/advertiser
있는 경우 /admin
IIS 사이트에 가상 디렉터리 가 없으면 오류가 나타납니다 .
내가 한 것은 admin
내 .../intepub/wwwroot
오류에 빈 디렉토리 가 생성 된 것 입니다.
위 단계를 수행 할 때까지 디버깅을 시작할 수 없습니다.
우리는 과거에 우리 팀에서이 문제를 겪었습니다. 기억하는 데 약간의 시간이 걸렸지 만, 이것이 우리가 전에 고 쳤던 방식과 정확히 같습니다.
나는 n'tier 아키텍처를 사용하고 있으며 같은 문제가 있지만 이것이 도움이됩니다. 먼저 같은이 connection string
당신에 libraries
당신처럼 DB를 액세스 할 수있는 app.config
그리고 web.config
당신은 단순히 오버로드 된 생성자 .edmx (Model.context.cs) 파일을 추가 그 후 지금은 두 개의 생성자 하나는 기본 및 u는 방금 추가 다른 하나 (이다 가지고 과부하).
public YourEntityName(string connString)
: base(connString)
{
}