1

Я построил сайт, который работает отлично на месте. Затем я попытался установить Azure. Все, что не использует базу данных работает нормально, но когда я пытаюсь получить доступ к базе данных я получаю:UnintentionalCodeFirstException на удаленном сервере (Azure)

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: 
Code generated using the T4 templates for Database First and Model First 
development may not work correctly if used in Code First mode... 

    at MySite.Infrastructure.DatabaseContainer.OnModelCreating(DbModelBuilder modelBuilder) 
    at System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder() 
    at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) 
    at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) 
    at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 
    at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) 
    at System.Data.Entity.DbSet`1.Add(TEntity entity) 
    at MySite.Services.ServiceBase`1.Add(T o) 
    at MySite.Controllers.SomeController.New(SomeObject objectParam) 

Моей локальной строка подключения

<add name="DatabaseContainer" connectionString="metadata=res://MySite.Data/Database.csdl|res://MySite.Data/Database.ssdl|res://MySite.Data/Database.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=MyDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Моей удаленная строка соединения

<add name="DatabaseContainer" connectionString="metadata=res://MySite.Data/Database.csdl|res://MySite.Data/Database.ssdl|res://MySite.Data/Database.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=serverstuff.from.azure;Initial Catalog=MyDatabase;User Id=MyUser;Password=MyPassword;App=EntityFramework&quot;" providerName="System.Data.EntityClient" 
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)" 
/> 

Мой DbContext класс

//------------------------------------------------------------------------------ 
// <auto-generated> 
// This code was generated from a template. 
// 
// Manual changes to this file may cause unexpected behavior in your application. 
// Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace MySite.Infrastructure 
{ 

    using MySite.Models; 

    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Infrastructure; 

    public partial class DatabaseContainer : DbContext 
    { 
     public DatabaseContainer() 
      : base("name=DatabaseContainer") 
     { 
     } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      throw new UnintentionalCodeFirstException(); 
     } 

     public DbSet<SomeObject> SomeObjects { get; set; } 
    } 
} 

MySite.Services.ServiceBase`1.Add (Т о) просто

db.SomeObjects.Add(o); 
db.SaveChanges(); 

Я проверил Azure, создается база данных, и есть таблица "SomeObject".

Я не понимаю причину, по которой он пытается выполнить OnModelCreating. Локально он работает отлично.

Что может быть причиной этого?

+0

Является ли база данных «связанным ресурсом» веб-сайта на вашей ливневой панели? – dav1dsm1th

+1

@ dav1dsm1th да. Я вижу это на вкладке «Связанный ресурс». – BrunoLM

+1

прохладный. У меня возникли проблемы с подключением к базам данных, когда они не являются также «связанными ресурсами». Вы видите соединения, которые преуспевают (или не работают) с вашего сайта? – dav1dsm1th

ответ

2

Только что выяснилось, что у меня было ConnectionString с тем же именем на панели Azure, которая была переопределяющей мою конфигурацию в Web.Config.

+1

Они вроде бы привлекают внимание людей к важности строк подключения в приборной панели - поскольку они переопределяют 'web.config'. Этот вопрос будет продолжаться, поскольку Azure становится более популярным. – dav1dsm1th

0

У меня была эта проблема на моем WebJob. Проблема заключалась в том, что имя строки подключения было таким же, как одна строка подключения для моего WebApp в настройках приложения.

Так что я имел в настройках приложения для WebApp в лазури:

DatabaseContainer <connectionString> 

И это было в моем WebJob:

<add name="DatabaseContainer" connectionString="metadata=res://*/TMSModel.csdl|res://*/TMSModel.ssdl|res://*/TMSModel.msl;provider=System.Data.SqlClient;provider connection string=myconnectionstring;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Если бы изменить имя строки подключения к чему-то еще в моем WebJob , потому что он использовал строку подключения моего WebApp, потому что имена перекрывались.

Поэтому я изменил DatabaseContainer на DatabaseContainerJob.

 Смежные вопросы

  • Нет связанных вопросов^_^