我正在尝试创建一个ASP.NET MVC应用程序,但是整天都在苦苦挣扎,甚至从数据库设置中获取模型。令人沮丧的是,当我从数据库创建ADO.NET模型时生成了连接字符串,并且它不喜欢它。
web.config 中的连接字符串:
<add name="DefaultConnection"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True"
providerName="System.Data.SqlClient"
/>
<add name="DatabaseEntities"
connectionString="metadata=res://*/Models.DatabaseModels.csdl|res://*/Models.DatabaseModels.ssdl|res://*/Models.DatabaseModels.msl;provider=System.Data.SqlClient;provider connection string="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Database.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient"
/>
声明触发了异常:
using (SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["DatabaseEntities"].ConnectionString))
{..}
'ArgumentException'不支持关键字:'元数据'。
解: 当LTMOD回答时,我需要web.config中的两个连接,初始SqlClient和生成的EntityClient连接。我需要在'using'语句中使用SqlClient连接字符串,并在块中调用con.Open()。
答案 0 :(得分:1)
实体和ADO的连接字符串有些不同。在我的项目中,我通常都有。像这样:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=SERVER;Initial Catalog=DBNAME;User ID=USER;Password=PWD;" providerName="System.Data.SqlClient" />
<add name="Entities" connectionString="metadata=res://*/Models.PTModel.csdl|res://*/Models.PTModel.ssdl|res://*/Models.PTModel.msl;provider=System.Data.SqlClient;provider connection string="data source=SERVER;initial catalog=DBNAME;user id=USER;password=PWD;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
ADO使用DefaultConnection,而实体访问自动使用实体连接。
这有很多原因。首先,有时候构建一个SQL查询来执行任务比使用LINQ / Lambda更容易。在很多情况下,所有工作都需要在DB中进行,并且通过这两种连接可以轻松地完成此任务。
答案 1 :(得分:0)
您对DatabaseEntities
访问层使用了ADO.net
连接适用于实体框架。
不需要ADO.net
的2个连接字符串,您需要
它们仅在使用EDMX
文件时用于EF,因为除模型连接字符串(DefaultConnection
)外,它们还需要DatabaseEntities
。
使用DefaultConnection
如果仍然出现错误,则表示您的连接字符串不正确,请使用visual studio连接到您的数据库并将连接字符串复制到您的web.config文件。
var connectionString =
ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
using (SqlConnection con = new SqlConnection(connectionString){...}