繁体   English   中英

asp.net应用程序连接到localDB而不是我的远程数据库

[英]asp.net app connects to localDB instead of my remote DB

我的ASP.NET MVC项目(VS2013)的连接字符串问题很严重。

我想通过Entity Framework从现有的SQLServer数据库中设置模型。 我在模型目录中添加了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=&quot;|DataDirectory|\aspnet-Impro MVC-20160114025340.mdf&quot;;Initial Catalog=&quot;aspnet-Impro MVC-20160114025340&quot;;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=&quot;data source=DBNAME.SUBDOMAIN.DOMAIN.com;initial catalog=ImproDB;persist security info=True;user id=MYLOGIN;password=PASS;MultipleActiveResultSets=True;App=EntityFramework&quot;" 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=&quot;data source=DBNAME.SUBDOMAIN.DOMAIN.com;initial catalog=DBNAME;persist security info=True;user id=MYLOGIN;password=MYPASS;MultipleActiveResultSets=True;App=EntityFramework&quot;" 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。 更改后,它不应该连接到我设置的数据库吗?

我还可以在下面这部分相对于数据库的地方看到:

 <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; }
    }

DbContext类构造函数的重载之一采用连接字符串的名称,在本例中为DefaultConnection 创建DbContext类的新实例时,可以将其作为字符串传递。

我个人喜欢在自己的DbContext类中创建一个默认构造函数,然后使用正确的命名连接字符串调用DbContext构造函数。

public class MyDbContext : DbContext
{
   public MyDbContext() : base("DefaultConnection"){}
}

还要确保您在执行应用程序的web.configapp.config中而不是在库或其他项目中定义连接字符串,即使这是您定义DbContext类的项目。

选项1 :只需将defaultConnectionFactory的Web配置设置更改为下面给出的设置,就可以完成所有设置。 最新的EF将自动使用此设置来确定要连接到的数据库。 这种方法的缺点是您的连接将分散在Web配置文件的多个部分中。

<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>

选项2 :另一种选择是在连接字符串部分中指定另一个如下所示的连接字符串。 用您的EF模型的模型名称替换以BloggingModel开头的部分。 这将比上面提到的第一种方法更好,因为您的连接字符串都将位于Web配置文件的同一部分中。 将以下配置中的ConnectionStringName替换为要使用的任何名称。

  <add name="ConnectionStringName"  
        connectionString="metadata=res://*/BloggingModel.csdl| 
                                                       res://*/BloggingModel.ssdl| 
                                                       res://*/BloggingModel.msl; 
                                           provider=System.Data.SqlClient 
                                           provider connection string= 
                                               &quot;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;&quot;" 
     providerName="System.Data.EntityClient" /> 

尝试在<entityFramework>标记之外提供connectionString

  <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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM