키워드가 지원되지 않는 데이터 소스


82

기본 멤버십 데이터베이스가있는 asp.net-mvc 응용 프로그램이 있습니다. ADO.NET Entity Framework에서 액세스하고 있습니다.

이제 IIS로 옮기고 싶지만 몇 가지 문제가 나타났습니다. SQL Server Management Studio를 설치하고 새 DB를 만들고 이전 .MDF 파일에서 모든 데이터를 가져와야했습니다. 남은 일은 (내가 아는 한) 연결 문자열로 변경하는 것입니다. 그러나 나는 이것에 대해 실제로 경험하지 않았으며 지원되지 않는 키워드 '데이터 소스'를 계속 얻고 있습니다. 예외. 내 연결 문자열은 다음과 같습니다.

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

어떤 아이디어라도, 무엇이 잘못 되었나요?


잘못된 시작 프로젝트를 선택했을 때이 오류가 발생하여 VS가 연결 문자열을 찾을 수 없습니다. app.config가있는 시작 프로젝트가 선택되었는지 확인합니다.
wnbates

답변:


147

현재 가지고있는 것은 유효한 ADO.NET 연결 문자열이지만 유효한 Entity Framework 연결 문자열이 아닙니다 .

EF 연결 문자열은 다음과 같습니다.

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

EF 연결 문자열의 모든 metadata=providerName=요소 가 누락되었습니다. 기본적으로 provider connection string부품에 포함 된 내용 만 있습니다 .

EDMX 디자이너를 사용하면 web.config 또는 app.config에서 유효한 EF 연결 문자열을 만들어야합니다.

마크

업데이트 : 좋아, 뭘 하려는지 이해합니다. ASP.NET 사용자 / 멤버십 데이터베이스에만 두 번째 "ADO.NET"연결 문자열이 필요합니다. 문자열은 정상이지만 providerName은 잘못되었습니다. "System.Data.SqlClient"여야합니다.이 연결은 ENtity Framework를 사용하지 않습니다. "EntityClient"를 지정하지 마십시오!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

providerName=System.Data.EntityClient==> Entity Framework 연결 문자열 을 지정하는 경우 (메타 데이터 = 및 모든 항목 포함).

필요한 경우 providerName=System.Data.SqlClient==> 모든 EF 추가없이 직선 ADO.NET SQL Server 연결 문자열을 지정합니다.


사실, 그렇게했지만 "C : \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf"물리적 파일을 열 수 없다는 예외가 발생합니다. 운영 체제 오류 5 : "5 (이 오류에 대한 텍스트를 검색하지 못했습니다. 이유 : 15105)". C : \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf 파일에 대해 자동 이름이 지정된 데이터베이스를 연결하려는 시도가 실패했습니다. 이름이 같은 데이터베이스가 있거나 지정된 파일을 열 수 없거나 UNC 공유에 있습니다. 일부 출처에서 나는 이것이 틀렸다고 생각했다. 어쨌든 고마워.
Trimack

두 번째 연결 문자열 문제를 이해하고 있는지 잘 모르겠습니다. 디자이너가 생성 한 것을 거기에두고 당신이 저에게 쓴 ASPNETMembership을 추가해야합니까?
Trimack

EDMX 디자이너에 엔터티가있는 경우 "EntityClient"및 EF 연결 문자열을 통해 액세스해야합니다. 당신이 "즉시"ASP.NET 멤버쉽 시스템을 사용하는 경우입니다 NOT 당신이 당신의 ASP.NET 회원 데이터베이스에 대한 연결 문자열을 만들 때, 당신은으로 "EntityClient을"을 사용할 수 없습니다, 당신의 EF 모델의 일부 공급자-SqlClient를 사용합니다.
marc_s 09-10-10

그래서 네 - 당신이 모두 필요합니다 - 귀하의 EDMX 시스템이 당신을 위해 생성 된 EF 연결 문자열, PLUS 두 번째 한 - 정상 ADO.NET 연결 문자열 -은 ASP.NET 멤버쉽 시스템을.
marc_s 09-10

1
게시물에 대해 100 번째 찬성표를주었습니다. 메리 크리스마스 :)
RBT

7

이 문제는 색인별로 web.config (또는 app.config) 연결 문자열을 참조 할 때 발생할 수 있습니다.

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

0 기반 연결 문자열은 기본적으로 스택의 상위에서 다른 항목을 상속 하므로 구성 파일의 연결 문자열이 항상있는 것은 아닙니다 .

권장되는 접근 방식은 이름으로 연결에 액세스하는 것입니다.

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

또는 먼저 구성 파일에서 connnectionStrings 요소를 지우려면 ...

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...

2

나는 같은 문제를 겪고 있었다.
하지만이 코드는 잘 작동합니다.

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />

0

Entity Framework를 사용하기 시작했을 때이 문제가 있었는데, 이전 SQL 서버 연결을 EntityFrameWork 연결로 변경하지 않았을 때 발생했습니다.

해결책 : web.config 파일 "add name =" Entities "connectionString = XYZ"를 통해 연결되는 파일에서 올바른 연결을 참조하고 있는지 확인하십시오. 제 경우에는이 작업을 수행해야했습니다.

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }

연결이 필요할 때마다 MyEntityFrameworkConnection을 호출하십시오.

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

참고 : 솔루션에 엔티티 모델을 추가 할 때 web.config 파일의 연결이 자동으로 생성됩니다.


0

나는 이것이 오래된 게시물이라는 것을 알고 있지만 최근에 동일한 오류가 발생했기 때문에 가치가있는 다른 해결책이 있습니다.

이것은 일반적으로 연결 문자열 오류입니다. 연결 문자열의 형식을 확인하세요. '엔티티 프레임 워크 연결 문자열'을 찾거나 위의 제안을 따를 수 있습니다.

그러나 제 경우에는 연결 문자열이 괜찮 았고 오류가 완전히 다른 이유로 인해 발생했기 때문에 누군가에게 도움이되기를 바랍니다.

  1. 먼저 EDMX 오류가 발생했습니다 . EDMX 에 새 데이터베이스 테이블이 있었고 테이블이 내 데이터베이스에 존재하지 않았습니다. Visual Studio의 '경고'아래 '오류 목록'창에 숨겨져있었습니다. 누락 된 테이블을 데이터베이스에 추가하여이 오류를 해결했습니다. 그러나 실제로 저장 프로 시저를 추가하려고 노력했지만 여전히 '데이터 소스'오류가 발생하므로 아래에서 해결 방법을 참조하십시오.

  2. 저장 프로 시저 오류 : 저장 프로 시저 를 추가하려고했는데 EDMX 디자인 창을 통해 추가 할 때마다 '데이터 소스'오류가 발생했습니다. 해결책은 저장 프로 시저를 공백으로 추가하는 것이 었습니다 (저장 프로 시저 이름과 선언은 유지했지만 저장 프로 시저의 내용을 삭제하고 '선택 1'로 바꾸고 EDMX에 다시 추가했습니다). 작동했습니다! 아마도 EF는 내 저장된 proc 내부를 좋아하지 않았습니다. EF에 proc을 추가하면 데이터베이스의 proc 내용을 내가 원하는대로 업데이트 할 수 있었고 작동하면 'datasource'오류가 해결되었습니다.

기이함


0

동일한 오류가 발생하고 다음과 같이 연결 문자열을 업데이트했습니다.

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

이것을 시도하면 문제가 해결됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.