![](/img/trans.png)
[英]ASP.NET deployment to IIS connects to localdb but always shows transient failure error
[英]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="|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。 更改后,它不應該連接到我設置的數據庫嗎?
我還可以在下面這部分相對於數據庫的地方看到:
<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.config
或app.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=
"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;""
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.