지원되지 않는 키워드:메타데이터
다음 줄:
WebSecurity.InitializeDatabaseConnection(connectionStringName: "DefaultConnection", userTableName: "UserProfile", userIdColumn: "UserID", userNameColumn: "UserName", autoCreateTables: true);
던지는 중:
'시스템'논쟁시스템에서 '예외'가 발생했습니다.Data.dll이지만 사용자 코드에서 처리되지 않았습니다.
추가 정보:지원되지 않는 키워드: 'metadata'입니다.
연결 문자열:
add name="DefaultConnection" connectionString="metadata=res://*/TalyllynModel.csdl|res://*/TalyllynModel.ssdl|res://*/TalyllynModel.msl;provider=System.Data.SqlClient;provider connection string="data source=***********;initial catalog=********;persist security info=True;user id=*********;password=********;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.SqlClient" /></connectionStrings>
어디가 잘못되고 있는지 잘 모르겠습니다.
전달한 문자열은 유효한 데이터베이스 연결 문자열이 아니며 SQL Server 연결 문자열이 포함된 EF 연결 문자열입니다.provider connection string 보안입니다파일. 연결 문자열InitializeDatabaseConnection이 필요합니다.
연결 문자열을 직접 구문 분석하지 않으려면 EntityConnectionStringBuilder 클래스를 사용하여 문자열을 구문 분석하고 ProviderConnectionString 속성에서 데이터베이스 연결 문자열을 검색할 수 있습니다.
이 문제가 발생한 이유는 연결 문자열에 다음이 있기 때문입니다.
providerName="System.Data.SqlClient"
하지만 다음과 같아야 합니다.
providerName="System.Data.EntityClient"
왜냐하면 다른 답변에서 말했듯이, 그것은 EF 연결 문자열이기 때문입니다.
다른 가능성을 추가하기 위해서입니다. (만난 것은) Azure의 Application Settings에 저장된 연결 문자열을 사용하여 Azure WebApp을 개발/유지보수하는 경우일 수 있습니다.
응용 프로그램 설정의 각 연결 문자열 옆에는 연결 문자열 유형에 대한 드롭다운이 있습니다. Entity Framework 값에 대해 이를 '사용자 지정'으로 설정하고 기본값(SQL 데이터베이스)으로 유지하는 것을 잊기가 매우 쉽습니다. 이 경우에도 위 오류가 발생합니다.
연결 문자열에서 데이터베이스 이름과 서버 이름을 추출하는 데 사용하는 코드가 있습니다.
Framework 문자열이 " 문자열"하여 Entity Framework 연결지인고주하, 만공면다그렇, 그것의다부있수니습전될달다로 전달할 수 있습니다.SqlConnectionStringBuilder:
만약 제가 이것을 하지 않았다면, 저는 그 고약한"Keyword Not Supported: Metadata오류
if (connectionString.ToLower().StartsWith("metadata="))
{
System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder efBuilder = new System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder(connectionString);
connectionString = efBuilder.ProviderConnectionString;
}
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
DatabaseServer = builder.DataSource; // eg "MikesServer"
DatabaseName = builder.InitialCatalog; // eg "Northwind"
저는 다른 누군가가 저와 같은 이상한 시나리오를 통해 이 문제에 부딪힐 경우를 대비해 다른 답을 제시할 것입니다.
먼저, 다른 사람들이 말했듯이, ADO 연결 문자열과 EF 연결 문자열은 다릅니다.
ADO 연결 문자열에는 여러 세미콜론으로 구분된 필드가 포함되어 있으며 연결 유형마다 매우 다를 수 있지만 일반적으로 "data source=xx", "initial catalog=yyy" 등이 표시됩니다."http=zzz"는 표시되지 않습니다.
EF 연결 문자열은 동일한 구조를 가지지만 "syslog=zzz"와 "syslog connection string=www"가 있습니다. 여기서 "www"는 이스케이프된 ADO 연결 문자열입니다.
따라서 ADO 연결 문자열의 일반적인 형식은 다음과 같습니다.
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True
EF 연결 문자열의 일반 형식은 다음과 같습니다.
metadata=res://*/MyDbContext.csdl|
res://*/MyDbContext.ssdl|
res://*/MyDbContext.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True;
application name=EntityFramework
"
이 문제에 직면한 대부분의 사람들은 EF 연결 문자열을 잘라내어 ADO 연결 문자열이 필요한 곳에 붙여넣은 것 같습니다.본질적으로, 저는 같은 일을 했지만, 그 과정은 그렇게 명확하지 않았습니다.
저의 경우, EF를 사용하는 웹 애플리케이션이 있었기 때문에 웹.config에 EF 연결 문자열이 제대로 포함되어 있었습니다.
배포 패키지를 게시했는데 배포할 때 사용할 연결 문자열을 묻는 메시지가 표시됩니다.이러한 파일은 배포 패키지의 생성된 SetParameters.xml 파일에 저장됩니다.
게시 대화 상자의 입력 필드에 EF 연결 문자열을 잘라 붙여넣었습니다.
웹 응용 프로그램을 배포하고 액세스하려고 하면 "Keyword not supported: metadata" 오류가 발생합니다.
제가 미처 깨닫지 못했던 것은 MS의 게시 도구가 ADO 연결 문자열을 예상했다는 것이고, 그것이 주어지면 EF 연결 문자열을 구성할 것이라는 것입니다.
결과적으로 SetParameters.xml과 내가 배포한 web.config의 연결 문자열은 다음과 같습니다.
metadata=res://*/MyDbContext.csdl|
res://*/MyDbContext.ssdl|
res://*/MyDbContext.msl;
provider=System.Data.SqlClient;
provider connection string="
metadata=res://*/XxDbContext.csdl|
res://*/XxDbContext.ssdl|
res://*/XxDbContext.msl;
provider=System.Data.SqlClient;
provider connection string=&quot;
data source=myserver;
initial catalog=mydatabase;
Persist Security Info=True;
User ID=myusername;
Password=mypassword;
MultipleActiveResultSets=True;
application name=EntityFramework
&quot;
""
즉, 내장된 공급자 연결 문자열이 ADO 연결 문자열이 아닌 EF 연결 문자열이었기 때문에 EF가 이 문자열을 사용하여 데이터베이스에 연결하려고 하면 이 오류가 발생했습니다.
다시 말해, 게시 대화 상자에 연결 문자열을 붙여넣을 때는 복사하려는 web.config에 있는 것이 EF 연결 문자열인 경우에도 EF 연결 문자열이 아닌 ADO 연결 문자열을 붙여넣어야 합니다.
EF 연결 문자열의 공급자 연결 문자열 필드에서 ADO 연결 문자열을 추출할 수 있습니다. 이는 배포에서 로컬 개발에서와 동일한 연결을 사용하는 경우에 필요한 것입니다.
Azure Application Settings => Connection Strings에서 사용하는 경우:
생성된 "EF-designer"를 대체해야 .
&qout;와 함께"현 상태에서해당 공급자=시스템을 확인합니다.Data.SqlClient
드롭다운에서 Type Custom(Type Custom)
모델(Entity Framework)에 대한 연결인 경우 모델에 대한 올바른 경로가 사용되는지 확인하십시오. 예: 모델 "MyWebRoot/Models/MyModels.edmx"가 metadata=res:///Models.dl|res:///Models.MyModels.sdl|res:/*/Modelsdmodels.l;로 구성되어 있습니다.
안녕하세요.
ADO.NET(이 경우 SqlConnection)에 대한 연결 문자열은 '메타데이터'를 사용할 수 없습니다.Entity Framework에 해당하는 항목을 사용하고 있습니다.ADO.NET은 다음과 같아야 합니다.
"data source=KAPS-PC\KAPSSERVER;initial catalog=vibrant;integrated security=True"요약하자면, 두 개의 별도 연결 문자열이 필요합니다. 하나는 EF용이고 다른 하나는 ADO.NET용입니다.
출처: http://forums.iis.net/post/2097280.aspx
Azure Web App의 경우 연결 문자열 유형에 "시스템"이 없습니다.Data.EntityClient", 사용자 지정이 제대로 작동합니다.
연결 문자열에서 메타데이터 정보를 제거합니다.
이거 바꿔주세요.
<add name="DefaultConnection" connectionString="metadata=res://*/TalyllynModel.csdl|res://*/TalyllynModel.ssdl|res://*/TalyllynModel.msl;provider=System.Data.SqlClient;provider connection string="data source=***********;initial catalog=********;persist security info=True;user id=*********;password=********;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.SqlClient" /></connectionStrings>
로.
<add name="DefaultConnection" connectionString="data source=***********;initial catalog=********;persist security info=True;user id=*********;password=********;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.SqlClient" /></connectionStrings>
제가 제 솔루션을 설명하기 전에, 저도 이 문제를 가지고 있습니다. EntityFramework와 Ado.net 을 사용하면 ADO에서 Entityframework Connection 문자열을 사용할 수 없으며 그 반대의 경우도 마찬가지입니다. 그래서 제가 한 일은 웹에서 이루어졌습니다.구성 파일 i는 EF 연결 문자열(메타데이터 1개)을 남겼고 ADO용 컨트롤러 i는 데이터베이스(속성)에서 가져온 연결 문자열을 추가했습니다.SqlConnection sql = newSqlConnection()과 같은 ADO 문자열을 추가합니다.
sql.ConnectionString = @"데이터 원본=.\tftbwr;초기 카탈로그=ABTO_POS;통합 보안=참;연결 시간 초과=30;Encrypt=False;TrustServerCertificate=False;어플의도=읽기 쓰기;MultiSubnetFailover=False";(내 문자열 사용 안 함)
오래된 직책이지만 나의 해결책은
안타깝게도 Azure Functions를 사용하여 EDMX로 별도의 프로젝트(클래스 라이브러리)와 대화하는 것으로는 해결되지 않았습니다.
콘텍스트를 편집해야 했습니다.CS 클래스 생성자를 대체합니다.
: base ("Entities")
와 함께
: base (ConfigurationManager.ConnectionStrings["Entities"].ConnectionString)
이것이 도움이 필요한 다른 누군가를 도울 수 있기를 바랍니다.
이 플레이스 체크인
<add name="ConnectionString" connectionString="Data Source=SMITH;Initial Catalog=db_ISMT;Persist Security Info=True;User ID=sa;Password=@darksoul45;MultipleActiveResultSets=True;Application Name=EntityFramework"
providerName="System.Data.SqlClient" />
보시다시피 ADO용과 로그인 시스템용 또는 원하는 것을 위한 두 개의 연결 문자열이 있습니다.저의 경우, ConnectionString은 Login 시스템을 위한 것이기 때문에 저는 그것을 다음에서 사용했습니다.
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand cmd = null;
SqlDataReader dr = null;
protected void Page_Load(object sender, EventArgs e)
언급URL : https://stackoverflow.com/questions/20183777/keyword-not-supported-metadata
'programing' 카테고리의 다른 글
| Oracle에 CASE 문이 있는 조건부 WHERE 절 (0) | 2023.07.02 |
|---|---|
| 기본적으로 모든 URL에 대한 액세스를 거부하는 방법은 무엇입니까? (0) | 2023.07.02 |
| 깃 저장소에 여러 프로젝트를 넣을 수 있는 방법이 있습니까? (0) | 2023.07.02 |
| 빈도/값을 기준으로 이산형 x 척도 정렬 (0) | 2023.07.02 |
| 날짜/시간 개체에서 피츠 시간대를 제거하려면 어떻게 해야 합니까? (0) | 2023.07.02 |
