Модель, що підтримує контекст <Database>, змінилася з моменту створення бази даних


253

Повідомлення про помилку:

"Модель, що підтримує контекст 'AddressBook', змінилася з часу створення бази даних. Видаліть / оновіть базу даних вручну або зателефонуйте Database.SetInitializer за допомогою екземпляра IDatabaseInitializer. Наприклад, стратегія RecreateDatabaseIfModelChanges автоматично видалить і відтворить базу даних, і необов’язково посіяти його новими даними ".

Я намагаюся використовувати функцію коду, і я написав наступне:

var modelBuilder = new ModelBuilder();
var model = modelBuilder.CreateModel();
using (AddressBook context = new AddressBook(model))
{
    var contact = new Contact
    {
        ContactID = 10000,
        FirstName = "Brian",
        LastName = "Lara",
        ModifiedDate = DateTime.Now,
        AddDate = DateTime.Now,
        Title = "Mr."

    };
    context.contacts.Add(contact);
    int result = context.SaveChanges();
    Console.WriteLine("Result :- "+ result.ToString());
}

Контекстний клас:

public class AddressBook : DbContext
{
    public AddressBook()
    { }
    public AddressBook(DbModel AddressBook)
        : base(AddressBook)
    {

    }
    public DbSet<Contact> contacts { get; set; }
    public DbSet<Address> Addresses { get; set; }
}

і рядок з'єднання:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
    <add name="AddressBook" providerName="System.Data.SqlClient"  
         connectionString="Data Source=MyMachine;Initial Catalog=AddressBook;
         Integrated Security=True;MultipleActiveResultSets=True;"/>
    </connectionStrings>
</configuration>

Отже, назва бази даних - "Адресна книга", і помилка трапляється, коли я намагаюся додати контактний об'єкт до контексту. Я чогось тут пропускаю?



Видаліть __MigrationHistory таблицю зі своєї бази даних
Захід Хасан

Відповіді:


397

Тепер це:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer<YourDbContext>(null);
    base.OnModelCreating(modelBuilder);
}

у вашому файлі YourDbContext.cs.


Я змінив виробничий db вручну і відключив міграцію, і вона працює, спасибі
Мохсен Афшин

13
Ps, це йде в Global.asax Application_Start ()
BritishDeveloper

48
Краще, ніж Global.asax, це помістити це в конструктор вашого класу DbContext. Таким чином він працює для кожного сайту, використовуючи контекст, а не лише один сайт, керований файлом Global.asax.
Корин

7
Напевно, найкраще розмістити його в статичному контролері контекстного класу, тому його називають лише один раз - як у цьому прикладі відео: msdn.microsoft.com/en-us/data/jj572367
Крістіан Фред

3
Він повинен бути розміщений всередині захищеного виправлення пустоти OnModelCreating (модель DbModelBuilderBuilder) {Database.SetInitializer <YourDbContext> (null); base.OnModelCreating (модельBuilder); }
Кріс Вон,

135

Ось деякі відомості з блогу Скотта Гу, розміщеного Джеффом, про те, що відбувається насправді:

Для тих, хто бачить цей виняток:

"Модель, що підтримує контекст" Виробництво ", змінилася з моменту створення бази даних. Видаліть / оновіть базу даних вручну або зателефонуйте Database.SetInitializerз IDatabaseInitializerекземпляром."

Ось що відбувається і що з цим робити:

Коли модель вперше створена, ми запускаємо DatabaseInitializer, щоб зробити такі дії, як створити базу даних, якщо її немає, або додати початкові дані. Типовий DatabaseInitializer за замовчуванням намагається порівняти схему бази даних, необхідну для використання моделі, з хешем схеми, що зберігається в таблиці EdmMetadata, що створюється з базою даних (коли Code First - це той, який створює базу даних). Існуючі бази даних не матимуть таблицю EdmMetadata, і тому не матимуть хеш… і впровадження сьогодні викине, якщо цієї таблиці не буде. Ми працюємо над тим, щоб змінити цю поведінку, перш ніж надсилати версію файлу, оскільки вона є типовою. До цього часу існуючі бази даних зазвичай не потребують ініціалізатора баз даних, тому її можна вимкнути для вашого типу контексту, зателефонувавши:

Database.SetInitializer<YourDbContext>(null);

Джефф


9
Я спробував це сьогодні, і більше не отримую "Модель змінилася", натомість я отримую "Недійсне ім'я об'єкта" dbo.Table ""
Стефан Бергфельдт,

3
Джефф хотів, щоб це було вирішене, але минуло вже більше двох років, і SetInitializer на нуль все ще потрібен. правильно? Тож чи могла б хто-небудь пояснити, як це вписується в робочий процес міграції.
kroiz

2
@jakejgordon: Я теж з EF6, але якщо він є у Global.asax, він усуває проблему лише під час запуску веб-сайту. Якщо у вас є одиничні тести, ви OOL. Краще розмістити його в конструкторі YourDbContext. Це фіксує його для кожного проекту, включаючи веб-сайт та тестові проекти.
Реп

1
ІМО, цю відповідь слід набрати вище, оскільки вона фактично пояснює, чому нам потрібно додати цей рядок коду. Дякую.
Пол

1
@StefanBergfeldt, якщо ви або хтось отримує Invalid object name 'dbo.Tableперевірку вашого рядка з'єднання attachDbFilename та початковий каталог
benscabbia

41

Для Entity Framework 5.0.0.0 - 6.1.3

Ви DO дійсно хочете зробити наступне:

1. using System.Data.Entity;   to startup file (console app --> Program.cs / mvc --> global.asax
2. Database.SetInitializer<YourDatabaseContext>(null);

Так, Метт Фрір прав. ОНОВЛЕННЯ -EDIT: Caveat полягає в тому, що я згоден з іншими в тому, що замість того, щоб додати цей код до global.asax, доданого до вашого класу DbContext

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // other code 
    Database.SetInitializer<YOURContext>(null);
    // more code here.
}

Як згадували інші, це також добре для обробки тестування пристрою.

В даний час я використовую це з Entity Framework 6.1.3 /.net 4.6.1

Я повернусь, щоб найближчим часом надати фрагмент CORE.


1
Дякую! Program.cs безумовно працює для консолей.
ХокейJ

Але коли ви вперше ініціалізуєте свою базу даних, тоді вона не створює базу даних, якщо я ставлю setinitializer null при методі onModelCreating. Будь-які думки? Eventhoug я роблю за допомогою (var context = Activator.CreateInstance <TContext> ()) {context.Database.Initialize (true); }
Рупеш Кумар Тіварі

Мені потрібно знайти свій код, який би я використовував, щоб інколи коментувати рядок і міняти місцями ... Я не пригадую проблеми, мені потрібно шукати.
Том Стікель

1
Найкраще рішення. Це змушує моє рішення працювати, і я поняття не маю, що таке наслідки. Здійснити та розгорнути.
Svend


31

Це виправлення більше не працює після CTP5.

Ви повинні робити Database.SetInitializer<YourContext>(null);


1
Куди це йде ... OnModelCreating не має нічого доступного під назвою DbDatabase
James Reategui

Десь під час запуску, я встановив mine в Application_Start.
chrisortman

Схоже, Database.SetInitializer спрацює добре в остаточному випуску EF 4.3.
Річард Беєр

Я припускаю, що "Це виправлення більше не працює після CTP5" означає, що відповідь, прийнята від 30 серпня 2010 року, - це те, що він говорить.
Том Стікель

19

Щойно дізнався відповідь і подумав про оновлення тут. Просто потрібно зробити наступне.

public class AddressBook: DbContext
{
   protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
    modelBuilder.IncludeMetadataInDatabase = false;
   }
}

12
Це не можливо для більш пізніх версій EF, також modelBuilder.Conventions.Remove<IncludeMetadataConvention>();не допомагає ситуації. DbDatabase.SetInitialzer (null); справді працює.
JTew

@TomStickel - я згоден. Stackoverflow.com/a/6143116/255562 позначено як відповідь.
Ashish Gupta

16

Або ви можете помістити цей рядок у свій файл Global.asax.cs під програмою Application_Start ():

System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<ProjectName.Path.Context>());

Не забудьте змінити ProjectName.Path.Context у вашому просторі імен та контексті. Якщо спочатку використовувати код, це видалить і створить нову базу даних, коли в схему будуть внесені будь-які зміни.


Саме те, що мені було потрібно, оскільки я займався лише прототипуванням. Дуже дякую.
Учень

8

Я витратив багато днів на вирішення цього питання, проаналізував багато різних постів і спробував багато варіантів і, нарешті, виправився. Ці 2 проекти в моєму рішенні, використовуючи перші міграції коду EF:

  • Застосування консолі "DataModel", яке в основному використовує як збірку, яка містить усі мої коди перших об'єктів, DbContext, Mirgery та загальне сховище. Я включив до цього проекту окремий порожній файл локальної бази даних (у папці DataModel / App_Data), щоб можна було генерувати міграції з консолі менеджера пакунків.
  • WebApi, який посилається на проект DataModel і використовує файл локальної бази даних з папки WebApi / App_Data, що не входить до проекту

Я отримав цю помилку, коли запитували WebApi ...

Моє оточення:

  • Windows 8.1 x64
  • Visual Studio 2015 Professional з оновленням 1
  • всі мої проекти, орієнтовані на .NET Framework 4.6.1
  • EntityFramework 6.1.3 від NuGet

Тут я зібрав усі зауваження, на які слід звернути увагу, та всі умови / вимоги, які повинні бути виконані, щоб уникнути згаданого винятку:

  1. Ви повинні використовувати лише одну версію пакету EntityFramework Nuget для всіх проектів у своєму рішенні.
  2. База даних, створена шляхом послідовного запуску всіх сценаріїв міграції, повинна мати ту саму структуру / схему, що і цільова база даних, і відповідати моделі сутності. Наступні 3 речі повинні точно відповідати / відображати / відповідати один одному:
    • Ваш весь сценарій міграції до останнього
    • Поточний стан моделі першої сутності коду (DbContext, сутності)
    • Цільова база даних
  3. Цільову базу даних (mdf-файл) слід оновити / відповідати останньому сценарію міграції. Перевірте, що таблиця "__MigrationHistory" у вашій цільовій базі даних містить записи для всіх сценаріїв міграції, які у вас є, це означає, що всі сценарії міграції були успішно застосовані до цієї бази даних. Я рекомендую вам використовувати Visual Studio для генерації правильних кодів перших сутностей та контексту, що відповідає вашій базі даних, Проект -> Додати новий елемент -> Модель даних даних ADO.NET Entity -> Код спочатку з бази даних: Звичайно, як альтернатива, якщо у вас немає бази даних, ви можете написати вручну модель (код перших сутностей та контекст), а потім генерувати початкову міграцію та базу даних.
  4. Назва рядка підключення, наприклад, MyConnectionString у конфігураційному файлі запуску проекту (Web.config / App.config):

    <configuration>
      <connectionStrings>
        <add name="MyConnectionString" connectionString="...">
      </connectionStrings>
    <configuration>

    має дорівнювати параметру, переданому в конструкторі вашого DbContext:

     public partial class MyDbContext : DbContext
     {
        public MyDbContext()
           : base("name=MyConnectionString"){}
        ...
  5. Перш ніж використовувати консоль Package Manager , переконайтеся, що ви використовуєте правильну базу даних для оновлення або генерації міграції, і необхідний проект встановлений як проект запуску рішення. Для підключення до бази даних вона буде використовувати рядок з'єднання з того файлу .config, який у проекті, який встановлений як проект запуску.
  6. І головне, що вирішило мою проблему: Це дивно, але в моїй папці WebApi / bin DataModel.exe була стара, не оновлена ​​з часу останньої збірки. Оскільки міграції були вбудовані в мою збірку DataModel.exe, то моя база даних WebApi оновила базу даних за допомогою старих даних. Мене збентежило, чому після оновлення бази даних в WebApi вона не відповідає останньому сценарію міграції з DataModel. Наступний код автоматично створюється (якщо його немає) або оновлює останню локальну базу даних міграції в моїй папці WebApi / App_Data.

       public class WebApiApplication : System.Web.HttpApplication
       {
           protected void Application_Start()
           {
               Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); 
               ...

    Я спробував очистити і відновити рішення, але це не допомогло, ніж я повністю видалив папки бін та obj з WebApi, видалив файли баз даних з WebApi / App_Data, побудував, перезапустив WebApi, зробив запит до нього, створив правильну базу даних - ледачу ініціалізацію (використовуючи рядки вище), що відповідає останнім міграціям та виняткам, більше не з’явилося. Отже, це може вирішити вашу проблему:

    1. видаліть вручну бін, obj папки зі свого запуску проекту (який генерує / оновлює вашу базу даних)
    2. побудуйте свій стартовий проект або краще очистіть та відновіть усі рішення.
    3. відтворити базу даних, запустивши проект (буде виконувати рядки вище) або скористатися командою Package Manager Console "update-database".
    4. вручну перевірити, чи відповідає згенерований db та __MirgationHistory останньому сценарію міграції.

5

Для мене з оновленням до 4.3.1 я просто усічу таблицю EdmMetaData або просто видаляю її прямо.


Я оновив до 4.3.1, а потім просто перейменував таблицю EdmMaetaData. Тепер я можу вносити зміни до моделі за потребою, і більше не дратівливих повідомлень про помилки щодо моделі, яка підтримує бла-бла.
Ашок Падманабан

3

Для розробників VB.NET:

Додайте наступний рядок до файлу Glabal.asax.vb наприкінці методу Application_Start ()

Database.SetInitializer(Of ApplicationDbContext)(Nothing)

Змініть ApplicationDbContext у вашому конкретному контексті Db.


2

У мене виникла ця проблема, і виявилося, що один проект вказував на SQLExpress, але той, хто з проблемою, вказував на LocalDb. (у відповідній web.config). Дурний нагляд, але варто зауважити тут, якщо хтось інший усуне цю проблему.


2

Це означає, що в контексті відбулися деякі зміни, які не були виконані. Спершу запустіть додаток-міграція, щоб сформувати зміни, які ми зробили (зміни, які ми могли б не знати), а потім запустіть Update-Database


2

У мене була така ж проблема - повторне додавання міграції та оновлення бази даних не спрацювало, і жоден з вищезазначених відповідей не здавався правильним. Тоді натхнення мене вразило - я використовую кілька рівнів (одна веб, одна інформація та одна справа). У шарі даних є контекст і всі моделі. Веб-шар ніколи не кидав цього винятку - це був бізнес-рівень (який я встановив як консольний додаток для тестування та налагодження). Виявляється, бізнес-рівень не використовував правильний рядок з'єднання, щоб отримати db та створити контекст. Тому я додав рядок підключення до конфігурації програми бізнес-рівня (та рівня даних) і порушує його функціонування. Повідомляючи це тут для інших, хто може зіткнутися з тією ж проблемою.


1

Я використовую метод Database.CompatibleWithModel (доступний в EF5) для перевірки відповідності моделі та БД до того, як я її використовувати. Я називаю цей метод відразу після створення контексту ...

        // test the context to see if the model is out of sync with the db...
        if (!MyContext.Database.CompatibleWithModel(true))
        {
            // delete the old version of the database...
            if (File.Exists(databaseFileName))
                File.Delete(databaseFileName);
            MyContext.Database.Initialize(true);

            // re-populate database

        }

1

Хоча гарна пропозиція, але не така точна у всіх випадках. Я розібрався. Будь ласка, переконайтеся, що ви запускаєте "включити-міграцію" за допомогою вікон PM у Visual Studio, і папка Міграція буде додана до вашого проекту.

Переконайтесь, що два файли класу c #, додані до папки, містять усі ваші моделі та їх відповідні властивості.

Якщо у вас є все, що створює рішення, і publis для розгортання.

Логіка полягає в тому, що існуючі метадані не можуть бути перезаписані, оскільки у вашій програмі немає метаданих для заміни поточних. В результаті ви отримуєте цю помилку "Модель, що підтримує контекст, змінилася з моменту створення бази даних"


1

Про всяк випадок, якщо у когось такий самий сценарій, як у мене.

У мене є база даних спочатку EF і в той же час використовую ідентичність asp.net

тому у мене в webkonfig є два з'єднанняStrings, і в цьому немає жодної проблеми. Було так, що я створював / запускав сценарії, щоб вручну генерувати таблиці ідентичності asp.net, чого я не повинен.

тому DROP спочатку всі таблиці ідентичності asp.net, створені вами вручну / зі скриптів.

DROP TABLE __MigrationHistory
DROP TABLE AspNetRoles
DROP TABLE AspNetUserClaims
DROP TABLE AspNetUserLogins
DROP TABLE AspNetUserRoles
DROP TABLE AspNetUsers

1

Жодне з цих рішень не буде працювати для нас (крім відключення перевірки схеми взагалі). Врешті-решт у нас відбувся промах у нашій версії Newtonsoft.json

Наш AppConfig не оновлювався належним чином:

<dependentAssembly>
   <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
  </dependentAssembly>

Рішенням було виправити версію збірки на ту, яку ми фактично розгортали

<dependentAssembly>
   <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="10.0.0.0" />
  </dependentAssembly>

У нас була однакова проблема з версією Newtonsoft.json, коли ми оновлювали версію, проблема була вирішена.
Rui

0

Після деяких досліджень на цю тему я виявив, що помилка виникає в основному, якщо у вас є екземпляр db, створений раніше на вашому локальному сервері sql express. Тому щоразу, коли у вас є оновлення на db і намагайтеся оновити db / запустити якийсь код на db без запуску Update Databaseкоманди Package Manager Console; Перш за все, ви повинні видалити попередній db з локального експресу sql вручну.

Також це рішення працює, якщо у вас немає AutomaticMigrationsEnabled = false;конфігурації.

Якщо ви працюєте із системою контролю версій (git, svn тощо) та деякими іншими розробниками, оновлюючи db-об’єкти у виробничій фазі, ця помилка виникає щоразу, коли ви оновлюєте базу коду та запускаєте програму.

Як було сказано вище, на базі коду є деякі рішення для цього. Однак це є найбільш практичним для деяких випадків.


0

Я також читаю книгу Pro ASP.NET MVC 4 і зіткнувся з тією ж проблемою, що і у вас. Для мене у мене виникли проблеми після внесення змін, передбачених у розділі "Додавання перевірки моделі" книги. Я вирішив проблему шляхом переміщення моєї бази даних з localdb на повномасштабний сервер SQL Server 2012. (BTW, я знаю, що мені пощастило, що я міг перейти на повномасштабну версію, тому не ненавиджу мене. ;-))) Має бути щось із повідомленням до db, що спричиняє проблему.


Звідки ви знаєте, що це повідомлення для db, а не, наприклад, його метадані?
flop

2
Вибачте за пізню відповідь. Виявляється, це взагалі не питання комунікації! Відтворення db просто замаскувало проблему, бо я знову отримав ту саму проблему! __Migrationxxx (не можу згадати точну назву таблиці, тому що я щойно її видалив) створив ef. Просто видаліть його, і вам повинно бути все добре.
J3Speaks

@ MyJ3 Всі люди носять усі ці фріггінські рядки та рядки коду. Це все, що мені було потрібно! Заслуговує на відповідь (необов’язковий сценарій).
Terrance00

@ Terrance00 Дякую!
J3Speaks

0

Перевірте наступні кроки

  1. Database.SetInitializer (null); -> у Global.asax.cs

2.

  1. ім'я вашого класу контексту повинно відповідати перевірці

0

Змініть Global.asax.cs, включаючи Application_Startподію, за допомогою:

Database.SetInitializer<YourDatabaseContext>(
 new DropCreateDatabaseIfModelChanges<YourDatabaseContext>());

5
Мені було б трохи зрозуміліше, що це робить особисто.
Кейсі

3
НІ НІ НІ, я не хочу використовувати DropCreateDatabaseIfModelChanges 99% часу!
Том Стікель

0

Ця помилка може вказувати на проблему з вашим рядком з'єднання та на те, чи відповідає ім'я рядка з'єднання декларації контексту бази даних.

У мене була ця помилка, оскільки я неправильно назвав локальну базу даних (дурна помилка), а ім'я рядка підключення в web.config "DefaultConnection" не відповідало MyDbContext, тобто

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


<connectionStrings>
    <add name="DefaultConnection" ...
  </connectionStrings>

0

Спробуйте використовувати DataIze SetInitializer, який належить до використання System.Data.Entity;

У Global.asax

protected void Application_Start()
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<yourContext>());
}

Це створить нову базу даних щоразу, коли ваша модель буде змінена. Але ваша база даних буде порожньою. Щоб заповнити її фіктивними даними, ви можете використовувати Seeding. Що ви можете реалізувати як:

Посів ::

protected void Application_Start()
{
    Database.SetInitializer(new AddressBookInitializer());
                ----rest code---
}
public class AddressBookInitializer : DropCreateDatabaseIfModelChanges<AddressBook>
{
    protected override void Seed(AddressBook context)
    {
        context.yourmodel.Add(
        {

        });
        base.Seed(context);
    }

}

0

Це дивно, але всі відповіді тут були для мене марними. Для мене працював ініціалізатор

MigrateDatabaseToLatestVersion

Ось моє рішення (я знаю, воно може бути набагато простішим, але я його використовую):

class MyDbMigrateToLatest : MigrateDatabaseToLatestVersion<MyDbContext, Configuration>
{
}

public class MyDbContext: DbContext
{
    public MyDbContext() : base("DbName")
    {
        SetInitializer();
    }

    public MyDbContext(string connString) : base(connString)
    {
        SetInitializer();
    }

    private static void SetInitializer()
    {
        if (ConfigurationManager.AppSettings["RebuildDatabaseOnStart"] == "true")
            Database.SetInitializer(new MyDbInitializerForTesting());
        else
            Database.SetInitializer(new MyDbMigrateToLatest());
    }
}

public sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(MyDbContext context)
    {
        // Whatever
    }
}

MyDbInitializerForTesting просто успадковується від DropCreateDatabaseAlways, тому в якомусь конкретному випадку (тестуванні) вся база даних відновлюється. Інакше він перенесений на останню версію.

Моє джерело: https://msdn.microsoft.com/en-us/data/jj591621.aspx#specific


0

У мене була така ж проблема, коли ми використовували одну базу даних для двох додатків. Налаштування disableDatabaseInitialization="true"в розділі типу контексту працює для мене.

<entityFramework>
<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
<contexts>
  <context type="PreferencesContext, Preferences" disableDatabaseInitialization="true">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[PreferencesContext, Preferences], [Migrations.Configuration, Preferences]], EntityFramework" />
  </context>
</contexts>

Детальніше див. Https://msdn.microsoft.com/en-us/data/jj556606.aspx


0

Створіть спеціальний ініціалізатор контексту:

public class MyDbContextInitializer : MigrateDatabaseToLatestVersion<MyDbContext, Migrations.Configuration>
{
    public override void InitializeDatabase(MyDbContext context)
    {
        bool exists = context.Database.Exists();

        base.InitializeDatabase(context);

        if (!exists)
        {         
            MyDbSeed.Seed(context);
        }
    }       
}

Зауважте, що Migrations.Configuration - це клас, що генерується командним рядком міграції в консолі менеджера пакунків. Можливо, вам буде потрібно змінити внутрішній на публічний модифікатор класу Migrations.Configuration.

І зареєструйте його у своєму OmModelCreating:

public partial class MyDbContext : DbContext
{

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<MyDbContext>(new MyDbContextInitializer());

        //other code for creating model
    }
}

-1

Тут я хочу поділитися ще одним методом, який запобігає помилці резервного копіювання моделі при зміні контексту:

1) Відкрийте файл DbContext

2) Додати простір імен за допомогою Microsoft.AspNet.Identity.EntityFramework;

3) загальнодоступний MyDbContext (): base ("name = MyDbContext") {Database.SetInitializer (новий DropCreateDatabaseAlways ()); }

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.