ASP*_*450 52 c# sql-server asp.net-mvc entity-framework
这一行:
WebSecurity.InitializeDatabaseConnection(connectionStringName: "DefaultConnection", userTableName: "UserProfile", userIdColumn: "UserID", userNameColumn: "UserName", autoCreateTables: true);
Run Code Online (Sandbox Code Playgroud)
投掷:
System.Data.dll中发生'System.ArgumentException'但未在用户代码中处理
其他信息:不支持关键字:'元数据'.
我的连接字符串是:
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>
Run Code Online (Sandbox Code Playgroud)
不知道我哪里出错了.
Pan*_*vos 67
您传递的字符串不是有效的数据库连接字符串,它是一个EF连接字符串,在其provider connection string
参数中包含SQL Server连接字符串.WebSecurity.InitializeDatabaseConnection需要有效的数据库连接字符串
为避免自己解析连接字符串,可以使用EntityConnectionStringBuilder类来解析字符串并从其ProviderConnectionString属性中检索数据库连接字符串
Wil*_*ton 55
当我遇到这种情况时,这是因为连接字符串有:
providerName="System.Data.SqlClient"
Run Code Online (Sandbox Code Playgroud)
但它应该是:
providerName="System.Data.EntityClient"
Run Code Online (Sandbox Code Playgroud)
因为正如另一个答案所说,它是一个EF连接字符串.
ofl*_*ero 21
只是为了增加另一种可能性(我遇到过) - 如果您正在使用Azure的应用程序设置中保存的连接字符串开发/维护Azure WebApp,则可能就是这种情况.
在"应用程序设置"中的每个连接字符串旁边都是连接字符串类型的下拉列表 - 很容易忘记将其设置为"自定义"以获取实体框架值并将其保留为默认值(SQL数据库) - 这也会导致上述错误.
这是我使用的一些代码,用于从连接字符串中提取数据库名称和服务器名称。
请注意它如何检查它是否是实体框架连接字符串,如果是,它会提取其中的“提供者连接字符串”部分,然后可以将其传递给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"
Run Code Online (Sandbox Code Playgroud)