623

갑자기 나는 계속해서MetadataException생성 된 인스턴스 생성에ObjectContext수업. App.Config의 연결 문자열이 올바르게 보입니다. 마지막으로 작업 한 이래로 변경되지 않았습니다. 변경하지 않고 기본 데이터베이스에서 새 모델 (edmx 파일)을 다시 생성 해 보았습니다.

누구든지 아이디어가 있습니까?

세부 정보 : 속성을 변경하지 않았으며 출력 어셈블리의 이름을 변경하지 않았으므로 어셈블리에 EDMX를 포함하지 않았습니다. 나는 퇴근 할 때까지 10 시간을 기다렸을뿐입니다. 그리고 나서 더 이상 작동하지 않습니다.

나는 EDMX를 다시 만들려고 노력했다. 나는 프로젝트를 다시 만들려고 노력했다. 심지어 처음부터 데이터베이스를 다시 만들려고했습니다. 행운을 빈다.


  • 조회수가 200,000 회를 초과하는 특정 제품에 대한 질문 인 경우 제품이 사용자의 예상대로 작동하지 않습니다. Microsoft에서이 문제를 해결하고 싶습니다. 시간이 있다면 제안을하기위한 링크는 다음과 같습니다.visualstudio.uservoice.com/forums/121579-visual-studio. - Tony L.
  • 내 문제는 db-layer 프로젝트에서 복사 한 connection-string을 대체하여 해결되었습니다. - Hardik

30 답변


790

이것은 응용 프로그램이 EDMX를로드 할 수 없음을 의미합니다. 이 문제를 일으킬 수있는 몇 가지 사항이 있습니다.

  • 모델의 MetadataArtifactProcessing 속성을 Copy to Output Directory로 변경했을 수 있습니다.
  • 연결 문자열이 잘못되었을 수 있습니다. 나는 당신이 당신이 그것을 바꾸지 않았다는 것을 안다. 그러나 당신이 다른 것들 (예를 들면, 집회의 이름)을 바꾸었다면 여전히 틀릴 수있다.
  • 포스트 컴파일 태스크를 사용하여 EDMX를 어셈블리에 임베드 할 수 있는데, 이는 더 이상 작동하지 않습니다.

간단히 말해 정확한 답변을 제공하기에는 세부 사항이 충분하지 않지만 이러한 아이디어는 올바른 길을 찾아야합니다.

최신 정보:나는 썼다.문제 해결을위한보다 완벽한 단계가있는 블로그 게시물.


  • 연결 문자열은 지난 번에 콘텐츠 비교 유틸리티와 비교하려는 노력에도 불구하고,였다잘못된. - J. Steen
  • 그것은 나를위한 연결 고리였습니다. 자체 App.config에도 연결 테스트가 필요한 통합 테스트가 있으면 edmx를 업데이트 할 때 상황이 동기화되지 않을 수 있습니다. - Ray Fan
  • 좋아요, 간단히 & quot; Embed & quot;를 설정하여 수정했습니다. 컴파일 한 다음 다른 쪽과 다시 설정합니다. 그게 내 문제를 해결해 줬어. - Shimmy
  • 동일한 문제가 있었고, 해결책을 시도하고, +1하고 싶었습니다. 이미 과거에 해냈다는 것을 깨달았습니다. 이전에이 문제가 발생했음을 기억하지 못합니다.). 이번에는 내 경우에 edmx가있는 클래스 라이브러리의 올바른 연결 문자열이고 사용되었을 때 웹 응용 프로그램이 잘못되었습니다. - Episodex
  • 굉장 가이드. 나를 위해 res : // * / Database.MyModel2 ...를 사용하는 다른 연결 문자열을 복사했습니다. res : // * / MyModel1 ... (데이터베이스는 통합 테스트 내의 폴더입니다. 계획) - emragins

332

이 작은 변화는이 문제에 도움이됩니다.

나는 3 개의 프로젝트를 가진 해결책이있다.

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

로 변경

connectionString="metadata=res://*/;


  • 그것은 나를 위해 그것을 고쳤다. 그러나 도대체 그것은 무엇을 의미 하느냐? - Lance Fisher
  • @Lance :이 부분에 대해 자세히 설명합니다.이 블로그 게시물 - Craig Stuntz
  • @ jocull : 아니요, 많은 경우에 효과가 없으며 다른 경우에는 느려질 것입니다. 이유를 이해하려면 내 블로그 게시물을 읽으십시오. - Craig Stuntz
  • 내 .edmx를 Model 폴더로 옮겼으며 연결 문자열을 업데이트하는 것을 잊었습니다. 훌륭한 포인터. 감사. 알아내는 데 몇 시간이나 걸렸을까요? - muruge
  • 귀하는 아주 열받은 소비자로부터 가난한 Microsoft 직원을 구해 냈습니다. - The Muffin Man

110

Edmx가 한 프로젝트에 있고 다른 프로젝트에서 사용하고있을 때이 예외를 얻을 수 있습니다.

그 이유는Res://*/CURRENT 어셈블리의 리소스를 가리키는 URI입니다. Edm을 사용하는 코드와 다른 어셈블리에 정의 된 경우 res : // * /는 리소스를 찾을 수 없어 작동하지 않습니다.

'*'를 지정하는 대신 (공개 키 토큰을 포함하여) 어셈블리의 전체 이름을 제공해야합니다. 예 :

res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...

연결 문자열을 구성하는 더 좋은 방법은 EntityConnectionStringBuilder를 사용하는 것입니다.

public static string GetSqlCeConnectionString(string fileName)
{
    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlServerCe.3.5";
    csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

public static string GetSqlConnectionString(string serverName, string databaseName)
{
    SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();

    providerCs.DataSource = serverName;
    providerCs.InitialCatalog = databaseName;
    providerCs.IntegratedSecurity = true;

    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = providerCs.ToString();

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

그래도 예외가 발생하면 리플렉터에서 어셈블리를 열고 .csdl, .ssdl 및 .msl 파일의 파일 이름을 확인하십시오. 자원의 이름이 메타 데이터 값에 지정된 이름과 다른 경우에는 작동하지 않습니다.


  • & quot; YourEdmxFileName & quot; 예 : 자격을 갖춘 이름이어야합니다. 어셈블리에서 네임 스페이스를 사용하는 경우 & quot; YourNamespace.YourEdmxFileName & quot; 그러나 네임 스페이스에서 어셈블리 이름과 동일한 부분을 제거해야합니다. - Marcel
  • MSDN은 두 번째 단락이 잘못되었다고 말합니다.& quot; 와일드 카드 (*)를 사용하면 Entity Framework는 올바른 이름의 리소스에 대해 모든 어셈블리를 조사해야합니다. & quot; - Craig Stuntz
  • 네임 스페이스는 관련이 없지만 임베디드 파일 경로는 확실합니다. 따라서 연관된 edmx 파일의 * .Designer.cs 파일을 검사하고 자동 생성 클래스 네임 스페이스가 MyCompany ... 인 경우에도 사용해야하는 것은 아닙니다. 대신 경로는 어셈블리 이름, 솔루션 폴더 이름 / 파일 이름입니다. 예 : & quot; metadata = res : //*/EntityModels.< filename & gt; .csdl | & quot; + res : //*/EntityModels.lt filename & gt; .ssdl | & quot; + "res : //*/EntityModels.lt filename & gt; .msl; & quot; - Daniel
  • @ 대니얼은 대체로 정확하지만 네임 스페이스와 임베디드 파일 경로가 동일한 경우가 있습니다. Reflector (또는 그에 대한 무료 대안)를보아야합니다. - Craig Stuntz
  • 버전, publickeytoken 등이 없으면 어셈블리 이름 만 사용하는 것처럼 보입니다. Like :res://MyAssembly/folder.<filename>.csdl... - Ivan Ferrer Villa

59

비슷한 오류가 발생했습니다. 나는 프로젝트 (긴 이야기)를 재창조했고, 오래된 프로젝트에서 모든 것을 꺼냈다. 내 모델이 이전에 '모델'이라는 디렉토리에 있었고 이제는 '모델'이라는 디렉토리에 있다는 것을 깨닫지 못했습니다. 일단 Web.Config에서 연결을 다음과 같이 변경했습니다.

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

이에:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

모든 것이 작동했습니다 (변경됨).ModelModels). 이 문자열에서이 세 위치를 변경해야한다는 것에 유의하십시오.


  • Entity Framework 모델을 Model에서 DAL로 옮겼습니다. 그런 다음 Linq 전제 조건 작성자를 테스트하기 위해 테스트 프로젝트에 테스트를 작성했습니다 (일주일 후). 이 오류가 있습니다. 테스트 프로젝트 App.config를 수정하여 세 곳에서 말한 것처럼 기본 프로젝트의 web.config가 어떻게 보이는지 확인했습니다. 그래서 당신의 간단한 응답은 나를 궤도에 올려 놓았습니다. - Patrik Lindström
  • 네, 감사합니다 - 파일 이름을 확인하십시오. 어떻게 든 나는 옛 이름을 가지고 있었다. - PeterX
  • 두 사람 사이에 차이가 있습니까?! - Erwin Rooijakkers
  • @ErwinRooijakkers 모델 대 ModelS - Marc
  • @ 마르크 감사합니다. :) - Erwin Rooijakkers

25

Reflector없이 모델 이름을 확인하는 빠른 방법 .... 디렉토리를 찾습니다.

... obj / {config output} / edmxResourcesToEmbed

.csdl, .msl 및 .ssdl 리소스 파일이 있는지 확인하십시오. 하위 디렉토리에있는 경우 하위 디렉토리의 이름을 모델 이름 앞에 붙여야합니다.

예를 들어 내 세 개의 리소스 파일은 하위 디렉토리에 있습니다.데이터, 그래서 내 연결 문자열이 있어야했다.

metadata = res : // * /데이터.MyModel.csdl | res : // * /데이터.MyModel.ssdl | res : // * /데이터.MyModel.msl;

(메타 데이터 = res : //*/MyModel.csdl | res : //*/MyModel.ssdl | res : //*/MyModel.msl).


  • 이것은 정확하게 나의 문제였습니다. 이것에 대해 몇 시간을 잃어 버렸습니다. 이 쉬운 설명을 주셔서 대단히 감사합니다. - Fernando Carvalhosa
  • 위대한 대답은 실제로 문자열이 무엇인지 찾는 방법을 설명합니다. 또한 하위 폴더에 & # 39; 구분 기호로 사용할 수 있으며 & # 39; 또는 & amp; # 39; - cjb110

15

나는 또한이 문제가 있었고 내 web.config의 connectionstring이 내 EDMX가있는 어셈블리의 app.config에있는 connectionstring과 약간 다르기 때문에 발생했습니다. 왜 그것이 바뀌 었는지는 알 수 없지만 두 가지 버전이 있습니다.

App.config :

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SMCSModel.csdl|res://*/Model.SMCSModel.ssdl|res://*/Model.SMCSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Web.config :

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SCMSModel.csdl|res://*/Model.SCMSModel.ssdl|res://*/Model.SCMSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

고정 된 것은 단순히 app.config 문자열을 복사하는 것이 었습니다 (끝에 작은 차이가 있음을 알 수 있습니다 - 대신 "App=EntityFramework"원했어"application name=EntityFramework") web.config에 넣고 문제가 해결되었습니다. :)


  • 고마워, 이것이 내 문제였다. 나는 EF와 다른 프로젝트 WCF가있는 DB에 액세스하는 1 개의 프로젝트를 가졌습니다. 첫 번째 프로젝트의 이름을 변경 한 후 connectionString은 첫 번째 프로젝트의 App.config에서 변경되었습니다. 그래서 난 web.config 에서뿐만 아니라 프로젝트 WCF에서 connectionString을 변경해야만했습니다 :) - Volkan
  • MSDN 설명서에서docs.microsoft.com/en-us/dotnet/framework/data/adonet/…:The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.Entity Framework 연결 문자열은 이러한 유연성을 공유하지 않으므로 예상 한 키워드 만 사용해야합니다. - Suncat2000

12

이것은 실수로 edmx 파일 (IDE의 Properties 아래에 있음)의 Build Action을 'EntityDeploy'에서 'None'으로 전환했을 때 일어난 일입니다. EntityDeploy는 사용자를 위해 메타 데이터를 채 웁니다.http://msdn.microsoft.com/en-us/library/cc982037.aspx


  • 이것이 내 수정입니다 - 나는 그것을 복사하고 몇 가지를 시도하고 나서 나중에 다시 Build Action으로 이름을 바꿀 때 edmx의 이름을 .old로 변경하여이 오류를 가져 와서 EntityDeploy로 다시 설정했습니다. 내 문제 :) - eth0
  • 내 EDMX 파일을 다른 폴더로 옮겼으며 빌드 작업을 변경하여 임베디드 리소스 이름도 업데이트해야했습니다. 감사! - David

7

방금 30 분을 행복하게 보냈습니다. 엔티티 개체의 이름을 변경하고 구성 파일의 항목 이름을 변경했지만 더 많은 내용이 있습니다 ... csdl에 대한 참조도 변경해야합니다.

아주 쉽게 놓칠 수 있습니다 - 이름을 바꾸는 경우,모두....


5

Visual Studio 2010, VB.net (ASP.NET) 4.0에서이 문제를 해결할 수있었습니다.

엔터티 모델 마법사에서 엔터티 연결 문자열을 볼 수 있습니다. 거기에서 복사하여 연결 문자열에 붙여 넣을 수 있습니다.

내가 누락 한 유일한 것은 "App_Code"입니다. 연결 문자열에.

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"


  • 아쉽게도 마법사의 연결 문자열이 app.config에 맞지 않습니다. @leqid는 모델 경로를 수정하는 좋은 방법을 제안했습니다. - Der_Meister

5

나는 똑같은 문제가 있었다. 리플렉터를 사용하여 준수한 DLL을 조사한 결과 리소스 이름이 옳지 않다는 것을 알았습니다. 나는 이름이 바뀌었고 지금은 괜찮아 보인다.


5

제 경우에는 edmx 파일의 속성을 변경하여 해결됩니다.

  1. edmx 파일 열기
  2. EDMX 디자이너의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하십시오.
  3. 속성 선택
  4. "메타 데이터 아티팩트 처리"라는 속성을 "출력 어셈블리에 포함"으로 업데이트합니다.

이것은 나를 위해 문제를 해결했다. 문제는 컨테이너가 메타 데이터를 찾으려고 할 때 찾을 수 없다는 것입니다. 같은 어셈블리에서 간단하게 만들 수 있습니다. 이 솔루션은 다른 어셈블리에 edmx 파일이 있으면 작동하지 않습니다.


  • +1 만분의 일이 오늘 저에게 중요한 문제였습니다. 제품 네임 스페이스를 재구성하고 어셈블리를 통합 할 때의 어려움. - Mike

5

나는이 오류에 하루 종일 보냈다.

함께 일하는 경우n-tear architecture

또는하려고separate Models에 의해 생성 된EDMXDataAccessLayer를 (를) 형성하십시오.DomainModelLayer

어쩌면이 오류가 발생할 것입니다.

  1. 첫 번째 문제 해결 단계는에서 연결 문자열을 확인하는 것입니다.webconfig (UILayer)appconfig (DataAccessLayer)같다
  2. 두 번째는 매우 중요합니다.connection string

    connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid.....
    

    이것이 문제 다.

내가 어디에서 왔는지Model또는 내 연결 문자열에 .csdl이 어디에 있는지

여기 나는 우리의 해결책을 그림으로 본다.

enter image description here

도와 주길 바래.


4

궁극적 인 솔루션 (EDMX 및 기타 잡화뿐만 아니라 다른 두 대의 시스템에서 데이터베이스를 다시 작성한 후에도)은 Entity Framework의 초판을 사용하지 않아야했습니다. .NET 4.0에서 다시 평가할 것을 기대합니다.

같은 문제가 발생하면다시그리고 답을 찾기 위해 모든 것을 조사해 보니 드디어 같은 문제가있는 사람을 찾았습니다. Visual Studio 마법사에서 연결 문자열을 올바르게 생성하지 못했고 메타 데이터 리소스에 대한 링크에 중요한 경로가 누락되었습니다.

v1.0 BUG? : 지정된 메타 데이터 리소스를로드 할 수 없습니다. 스크립트! = 모델

2013-01-16 업데이트: EF Code First Practice를 사용하여 거의 독점적으로 (기존 데이터베이스에서도)이 문제는 더 이상 문제가되지 않습니다. 필자에게 이것은 자동 생성 코드 및 구성에서 혼란을 줄이고 제품에 대한 자체 제어권을 늘릴 수있는 실용적인 솔루션이었습니다.


4

내 문제와 해결책은 증상이 "지정한 메타 데이터 리소스를로드 할 수 없음"과 동일하지만 근본 원인이 다릅니다. 솔루션 2에서 하나의 프로젝트는 EntityModel이고 나머지는 솔루션입니다. 사실 EntityModel에서 EDMX 파일을 삭제하고 다시 만들었습니다.

해결책은 웹 응용 프로그램 프로젝트로 돌아가서이 줄을 구성 파일에 추가해야한다는 것이 었습니다. 새 모델은 "다른"프로젝트의 Web.Config 파일에서 복제해야하는 몇 가지 항목을 변경했습니다. 이전 설정은 더 이상 좋지 않습니다.

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />



4

인터넷 검색 및 솔루션을 해결하기 위해 노력한 후 근무 제안했다. 여기 몇 가지 해결책을 나열했습니다. 나는 또한 나를 위해 일한 것을 주목했다. (필자는 EF 버전 6.1.1과 SQL 서버 2014를 사용했지만 이전 DB는 사용하고있었습니다)

  1. 프로젝트를 재건하고 다시 시도하십시오.
  2. VS 닫기 및 열기 - 어떻게 작동하는지 모르겠습니다.
  3. 디렉터리 안에 .EDMX 파일을 배치했는지 확인하십시오. ConnectionString에 디렉터리를 포함해야합니다. 예를 들어, 광산은 DAL 폴더 안에 있습니다. 그래서 다음과 같이 보입니다.connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;(이 파일들은 ~ / obj / .. 디렉토리 아래의 솔루션 탐색기에서 모든 파일 표시를 토글 할 수 있습니다)

... 그리고 내가 시도한 많은 것 [좋아해 : EntityFramework 버전을 이후 버전으로 되 돌린다.


나를 위해 일한 것 :

이것으로부터여기에 기사, 그것은 내 문제를 해결하는 데 도움이되었습니다. 방금 나는 바꿨다.ProviderManifestToken="2012"ProviderManifestToken="2008"EDMX 파일에서. 이것을하기 위해:

솔루션 탐색기

  1. 파일을 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 열기로 ..
  3. XML 편집기
  4. ProviderManifestToken = 2008 년의 "XXXX"변경

도움이되기를 바랍니다.


  • 나는 최근에 겉으로보기에는 변화를주지 않고서이 문제를 가지고 있었다. VS를 다시 시작하려고했지만 그때 청소 및 재건으로 해결되었습니다. 따라서 다른 사람에게 변경 사항을 적용하지 않고 나머지 중 어느 것도 적합하지 않은 것으로 판단되면 정리 / 재구성을 시도해보십시오. - Greg

3

제 경우에는이 문제가 내 모델의 edmx 파일 이름 바꾸기와 관련이 있습니다 ... csdl / ssdl / msl 파일의 app.config 연결 문자열을 수정하여 내 문제가 해결되었습니다.

EF 4.0 디자이너를 사용하여 csdl / ssdl / msl을 생성하는 경우이 3 개의 "파일"은 실제로 모델의 기본 edmx 파일 내에 저장됩니다. 이 경우, Waqas의 게시물은 꽤 많은 표를합니다. 그의 예제에서 "Model_Name"은 모델의 .edmx 파일의 현재 이름 (.edmx 제외)으로 변경해야 함을 이해하는 것이 중요합니다.

또한 edmx 파일이 프로젝트의 루트 수준에 있지 않은 경우 Model_Name 앞에 상대 경로 (예 :

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

csdl / ssdl / msl xml은 'MyModel'폴더에 저장된 모델 파일 'WidgetModel.edmx'에 저장됩니다.


3

ObjectContext 객체를 사용하는 프로젝트와 다른 프로젝트에서 정의 된 경우이 헬퍼 클래스를 작성하여 ObjectContext 객체의 인스턴스를 작성했습니다. 구성 파일에서 연결 문자열을 구문 분석하고 '*'를 전체 어셈블리 이름으로 바꿉니다.

그것은 객체를 만들기 위해 반사를 사용하기 때문에 완벽하지는 않습니다. 그러나 그것을 찾을 수있는 가장 일반적인 방법입니다.

누군가가 도움이되기를 바랍니다.

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}


3

여러분 모두를 위해서SelftrackingEntities사용자, Microsoft 워크 스루 (Walk-through)를 따라 Object Context 클래스를 Wcf 서비스 프로젝트 (컨텍스트 .tt에 연결 함)를 사용하여이 대답을 얻습니다.

이 게시물에 표시된 답변의 일부로 다음과 같은 코드가 포함되어 있습니다.

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

당신을 위해 일하지 않을 것이다 !! 그 이유는YourObjectContextType.Assembly이제 다른 Assembley (wcf 프로젝트 어셈블리 내부)에 상주합니다.

그럼 대체해야합니다.YourObjectContextType.Assembly.FullName와 ->

ClassTypeThatResidesInEdmProject.Assembly.FullName 

재미있어.


3

이것은 새로운 .edmx 디자이너를 만들기 전에 솔루션을 정리하지 않을 때 발생합니다. 새로운 .edmx 디자이너를 만들기 전에 솔루션을 정리하는 것을 잊지 마십시오. 이 기능을 사용하면 더 많은 문제를 건너 뛸 수 있습니다. 당신이 비주얼 스튜디오에서 새로운 경우 제공되는 탐색 세부 사항을 주저하십시오.

클릭 -> 빌드 -> 솔루션 정리

그런 다음 클릭 -> 빌드 -> 솔루션 재구성

희망이 도움이됩니다. 모두에게 감사드립니다.


2

이 같은 오류 메시지에 문제가있었습니다. 내 문제는 Visual Studio 2010을 닫았다가 다시 열어 해결되었습니다.


2

어셈블리의 이름을 변경했기 때문에 동일한 문제가 발생했습니다.

또한 Properties / AssemblyInfo.cs 프로젝트의 AssemblyTitle 및 AssemblyProduct 특성에서 이름을 바꾸고 edmx 파일에 대한 참조를 삭제하고 다시 추가해야했습니다.

그럼 괜찮 았어.


2

동일한 문제를 가지고 데이터베이스에서 edmx를 다시 만들었습니다. 내 문제를 해결해.


  • 불행히도 그 원인을 다루지 않고 그 증상을 다루고 치료합니다. - cbillowes

2

예외는 컴파일러가 존재하지 않는 메타 데이터를 가리키고 있으므로 복사 만하기 때문입니다.app.configconnectionstring toWeb.configConnectionString


1

또한 Rick과 동일한 문제와 해결책이있었습니다. 기존 프로젝트의 .edmx를 가져 오는 중임을 제외하고는 기본 네임 스페이스가 다른 하위 디렉토리로 가져와도 관계가 없으므로 연결을 업데이트해야했습니다. 다른 하위 디렉토리 이름 지정을 포함하도록 세 곳의 Web.Config 내부 문자열 :


1

솔루션 위치에있는 Mvc3AppConverter와 관련된 의심되는 버그를 극복하기 위해 솔루션 폴더로 이동 한 솔루션 폴더에 프로젝트가 포함 된 솔루션과 동일한 문제가있었습니다.

모든 * 프로젝트 참조가 필요에 따라 다시 추가 된 후에 솔루션이 컴파일되었지만 웹 사이트가 열릴 때 오류가 발생했습니다.

EDMX는 옮겨진 프로젝트 중 하나 ( '데이터'프로젝트)에 있지만 데이터 프로젝트에 대한 참조가 없기 때문에 컴파일 오류가 발생하지 않고 런타임 오류 만 발생합니다.

기본 프로젝트에 누락 된 참조를 추가하기 만하면이 문제가 해결되었으므로 연결을 전혀 편집 할 필요가 없습니다.

나는 이것이 다른 누군가를 돕기를 바랍니다.


1

열악한 app.config 또는 web.config 파일이이 작업을 수행 할 수 있습니다. app.config 연결 문자열을 내 UI의 web.config에 복사하여 다음과 같이 입력했습니다.

<connectionStrings>
    <connectionStrings>
          <add name="name" connectionString="normalDetails"/>
    </connectionStrings>
</connectionStrings>


1

EDMX 파일이 포함 된 클래스 라이브러리를 참조하지 않았습니다.



1

다른 프로젝트의 edmx를 사용하는 경우 연결 문자열에서 변경하십시오.

metadata=res://*/Data.DataModel.csdl

...에...

metadata=res://*/DataModel.csdl


0

내 이론은 동일한 이름 (예 : Model1)을 가진 edmx 파일이 두 개 이상있는 경우 해당 예외를 제공한다는 것입니다. 다른 프로젝트에 앉아있는 모든 edmx 파일을 Model1과 같은 이름으로 지정하기로 결정했을 때 동일한 문제가 발생했습니다. 왜냐하면 독립적이어야한다고 생각했기 때문입니다.


0

이 예외의 또 다른 원인은 관련 테이블을 ObjectQuery에 포함 시키지만 잘못된 탐색 특성 이름을 입력하는 경우입니다.

예:

var query = (from x in myDbObjectContext.Table1.Include("FKTableSpelledWrong") select x);

연결된 질문


관련된 질문

최근 질문