ASP.NET приложение се свързва с localDB, вместо с другата база данни

+6 гласа
239 прегледа
попитан 2016 април 27 от Nikoleta.V. (4,090 точки)

Изглежда сякаш имам проблем с connection string-а в проект с ASP.NET MVC (VS2013). 

Исках да направя моделите с Entity Framework от вече съществуваща SQLServer база данни. Добавих ADO.NET моделите в model factory-то. Следвах стъпките и EF правилно създаде 6-те класа от 6-те таблици. Поне това сработи. Сега, като пусна проекта, приложението се свързва с LocalDB v11.0 вместо с базата, която използвах за създаване на класовете.Ето го и кода на BDDContex: 

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

    } 

Предполагам, че е проблем в 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 

Допълнителната информация е тази: 

A network-related or instance-specific error occurred while establishing a connection to SQL Server. 

Някакви идеи как да го оправя? 

2 отговори

0 гласа
отговорени 2016 април 28 от valeri.hristov (7,340 точки)
избран 2016 май 3 от Mitko Vasilev
 
Най-добър отговор

Имаш 2 възможности:

  1. Промени настройката defaultConnectionFactory от web.config по долупосочения начин. Най-новия EF автоматично ще използва тази настройка, за да определи към коя база да се свърже. Недостатък на този подход е, че връзките към базите ще бъдат пръснати из web config файла

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

  1. Другата възможност е да определиш в частта с connection string-овете друг такъв по следния начин:

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

Замени частите, които започват с BloggingModel с името на твоя модел. Така би трябвало да е по-добре, тъй като connection string-овете ще бъдат на едно място в файла. Замени ConnectionStringName с каквото име искаш да използваш.

0 гласа
отговорени 2016 юни 8 от pyo (180 точки)
Нещо много полезно: http://www.connectionstrings.com/sql-server/
...