我的ASP.NET MVC项目(VS2013)中存在强烈的连接字符串问题。
我想从现有的SQLServer数据库通过Entity Framework设置模型。 我在我的模型目录中添加了一个ADO.NET实体数据模型。 我按照步骤操作,EF显然正确地从我的6个DB表中创建了6个模型类。这至少工作得很好。 现在,当我运行项目时,应用程序连接到LocalDB v11.0而不是用于创建实体的DB。
我想这完全是关于web.config的,但我仍然太老了,无法对其进行排序。 web.config中:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename="|DataDirectory|\aspnet-Impro MVC-20160114025340.mdf";Initial Catalog="aspnet-Impro MVC-20160114025340";Integrated Security=True" providerName="System.Data.SqlClient" /><add name="ImproDBEntities" connectionString="metadata=res://*/Models.DBImpro.csdl|res://*/Models.DBImpro.ssdl|res://*/Models.DBImpro.msl;provider=System.Data.SqlClient;provider connection string="data source=DBNAME.SUBDOMAIN.DOMAIN.com;initial catalog=ImproDB;persist security info=True;user id=MYLOGIN;password=PASS;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /><add name="ImproDBEntities1" connectionString="metadata=res://*/Models.DBImpro.csdl|res://*/Models.DBImpro.ssdl|res://*/Models.DBImpro.msl;provider=System.Data.SqlClient;provider connection string="data source=DBNAME.SUBDOMAIN.DOMAIN.com;initial catalog=DBNAME;persist security info=True;user id=MYLOGIN;password=MYPASS;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
我将其替换为:
<connectionStrings>
<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=DBNAME.SUBDOMAIN.DOMAIN.com;packet size=4096;user id=MYLOGIN;pwd=PASS;data source=DBNAME.SUBDOMAIN.DOMAIN.com;persist security info=False;initial catalog=ImproDB" />
</connectionStrings>
但它仍然连接到localDB。它不应该连接到我在此更改后设置的DB ????
我还可以在下面看到这部分相对于DB:
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
我想这必须是我需要更新的内容。如果我评论这部分,应用程序无法启动:
An exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.dll but was not handled in user code
其他信息:建立与SQL Server的连接时发生与网络相关或特定于实例的错误....
任何线索如何解决这个问题?
提前谢谢。编辑: 因为我在EF中首先使用数据库,这里是BDDContext的代码
public partial class ImproDBEntities1 : DbContext
{
public ImproDBEntities1()
: base("name=ImproDBEntities1")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Categories_Impro> Categories_Impro { get; set; }
public virtual DbSet<Cours_Impro> Cours_Impro { get; set; }
public virtual DbSet<Ex_Impro> Ex_Impro { get; set; }
public virtual DbSet<Spectacle_Impro> Spectacle_Impro { get; set; }
public virtual DbSet<Categories_Du_Spectacle> Categories_Du_Spectacle { get; set; }
public virtual DbSet<Ex_du_Cours> Ex_du_Cours { get; set; }
}
答案 0 :(得分:1)
DbContext
类构造函数的一个重载采用连接字符串的名称,在您的情况下为DefaultConnection
。您可以在创建DbContext
类的新实例时将其作为字符串传递。
我个人喜欢在我自己的DbContext
类中创建一个默认构造函数,然后使用正确的命名连接字符串调用DbContext
构造函数。
public class MyDbContext : DbContext
{
public MyDbContext() : base("DefaultConnection"){}
}
还要确保在正在执行的应用程序的web.config
或app.config
中定义连接字符串,而不是在库或其他项目中定义,即使这是您定义{{1 }。class。
答案 1 :(得分:1)
选项1 :只需将packages/
的网络配置设置更改为下面给出的内容即可。最新的EF将自动使用此设置来确定要连接的数据库。这种方法的缺点是您的连接将分散在Web配置文件的多个部分中。
defaultConnectionFactory
选项2 :您的另一个选择是在连接字符串部分中指定另一个如下所示的连接字符串。将以<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=DBNAME.SUBDOMAIN.DOMAIN.com;packet size=4096;user id=MYLOGIN;pwd=PASS;data source=DBNAME.SUBDOMAIN.DOMAIN.com;persist security info=False;initial catalog=ImproDB;MultipleActiveResultSets=True" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
开头的部件替换为EF型号的型号名称。 这比上面提到的第一种方法更好,因为你的连接字符串都在web配置文件的同一部分内。将以下配置中的BloggingModel
替换为你想要的任何名称使用
ConnectionStringName
答案 2 :(得分:0)
尝试在connectionString
标记之外提供<entityFramework>
:
<connectionStrings>
<!-- whatever -->
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>