Код сначала создает таблицы

Я следовал этому руководству, и я попытался добавить несколько новых столбцов в таблицу userprofile. И я попытался создать новую таблицу.

public class UsersContext : DbContext { public UsersContext() : base("DefaultConnection") { } public DbSet UserProfiles { get; set; } public DbSet TestTabel { get; set; } } [Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } public string UserName { get; set; } public string Mobile { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } [Table("TestTabel")] public class TestTabel { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int TestId { get; set; } public string TestName { get; set; } public string TestMobile { get; set; } } 

Чем я пытался обновить базу данных с помощью консоли командой update-database, и я получил эту ошибку msg:

В базе данных уже есть объект с именем «UserProfile».

Новые столбцы, которые не добавлены, и ни одна таблица.

Что мне не хватает?

[EDIT] Я выполнил команды добавления-миграции и обновления базы данных, и это все (приходилось выполнять команду update-database дважды, второй раз с подробным)

 PM> Add-Migration cmdlet Add-Migration at command pipeline position 1 Supply values for the following parameters: Name: test Scaffolding migration 'test'. The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration 201304011714212_test' again. PM> Update-Database The project 'MVC4SimpleMembershipCodeFirstSeedingEF5' failed to build. PM> Update-Database Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Applying code-based migrations: [201304011714212_test]. Applying code-based migration: 201304011714212_test. Running Seed method. PM> Update-Database -verbose Using StartUp project 'MVC4SimpleMembershipCodeFirstSeedingEF5'. Using NuGet project 'MVC4SimpleMembershipCodeFirstSeedingEF5'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'aspnet-MVC4SimpleMembershipCodeFirstSeedingEF5' (DataSource: ., Provider: System.Data.SqlClient, Origin: Configuration). No pending code-based migrations. Running Seed method. PM> 

[/РЕДАКТИРОВАТЬ]

Configuration.cs:

  namespace MVC4SimpleMembershipCodeFirstSeedingEF5.Migrations { internal sealed class Configuration : DbMigrationsConfiguration { public Configuration() { AutomaticMigrationsEnabled = true; } protected override void Seed(UsersContext context) { WebSecurity.InitializeDatabaseConnection( "DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); if (!Roles.RoleExists("Administrator")) Roles.CreateRole("Administrator"); if (!WebSecurity.UserExists("test")) WebSecurity.CreateUserAndAccount( "test", "password", new { Mobile = "+19725000374", FirstName = "test", LastName = "test" }); if (!Roles.GetRolesForUser("test").Contains("Administrator")) Roles.AddUsersToRoles(new[] { "test" }, new[] { "Administrator" }); } } } 

В папке «Фильтры» 1 файл cs:

 namespace MVC4SimpleMembershipCodeFirstSeedingEF5.Filters { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute { private static SimpleMembershipInitializer _initializer; private static object _initializerLock = new object(); private static bool _isInitialized; public override void OnActionExecuting(ActionExecutingContext filterContext) { // Ensure ASP.NET Simple Membership is initialized only once per app start LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); } private class SimpleMembershipInitializer { public SimpleMembershipInitializer() { Database.SetInitializer(null); try { using (var context = new UsersContext()) { if (!context.Database.Exists()) { // Create the SimpleMembership database without Entity Framework migration schema ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); } } WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); } catch (Exception ex) { throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); } } } } } 

Строка подключения:

  

Последняя миграция:

 namespace MVC4SimpleMembershipCodeFirstSeedingEF5.Migrations { using System; using System.Data.Entity.Migrations; public partial class test : DbMigration { public override void Up() { CreateTable( "dbo.TestTabel", c => new { TestId = c.Int(nullable: false, identity: true), TestName = c.String(), TestMobile = c.String(), }) .PrimaryKey(t => t.TestId); } public override void Down() { DropTable("dbo.TestTabel"); } } } 

    Я просто собираюсь бросить все здесь, как прохождение, чтобы получить ваш код – сначала и миграции – атаковать различные проблемы, которые могут или не могут произойти. Примечание: код-первый оказался очень надежным – и его можно разрабатывать и с живыми сценариями – вам просто нужно знать, что вы делаете.

    Скорее всего, ваша миграция и firebase database в основном не синхронизированы.

    Ваша существующая миграция пытается работать против старой копии базы данных – с ups / downs, которые были оптимизированы для «пустого db», я думаю.

    Вам нужно запустить свои миграции (Add-Migration) против копии Db, к которой вы привязаны, – это создаст «разницу» и просто обновит ваш Db (всегда убедитесь, что резервное копирование, конечно, поскольку это может упасть / измениться и т. д.).

    Или, если возможно, очистите свой Db, а затем запустите его.

    Или, если live Db – создать миграции – и запустить Update-Database -Script на вашей dev-машине – для генерации полного Db – или изменений (все это очень грубо, вам нужно приспособиться к вашему делу). И затем применитесь к вашему «живому Db», запустив скрипты.

    Вы также можете проверить мой предыдущий пост на синхронизацию …

    MVC3 и First First Migrations – «модель, поддерживающая контекст« blah », изменилась с момента создания базы данных»

    РЕДАКТИРОВАТЬ:
    Также проверьте этот ответ AutomaticMigrationsEnabled false или true?

    И если все в порядке с вашим способом делать вещи, добавьте AutomaticMigrationsEnabled = true; для вас Configuration (также в папке Migrations – создана для вас) ..

    Пара шагов я всегда делаю, чтобы очистить миграцию:

    (хорошо для резервного копирования)
    – Enable-Migrations -force (только в первый раз – это удаляет конфигурацию.cs и любое «семя» там!)
    – AutomaticMigrationsEnabled = true;
    – удалить существующие миграции вручную из проекта (\ Migrations)
    – перестроить проект в этот момент
    – Первоначальная миграция
    – Обновление базы данных -Force -Verbose

    … позже (последующие миграции):
    – Add-Migration SomeOther1
    – Обновление базы данных -Force -Verbose
    … при условии, что вы держите свой Db в синхронизации – то есть осторожны с «перемещением Db вокруг», вручную настраивая и т. д. (и в этом случае см. другое сообщение)

    Еще пару вещей:

    С PM Console …
    – выберите свой проект из списка,
    – убедитесь, что ваш «основной exe» (вызов вашего проекта / сборки данных или тот же проект, если консоль / приложение), задан как «запуск» проекта,
    – всегда смотрите комментарии консоли, так как это может быть попытка создать и получить доступ к другому проекту.

    Подключение:

    См. Этот пост. Миграция не меняет мою таблицу.
    Короче говоря, ваше соединение называется вашим контекстом + ваш проект – если не указано иное. Он извлекается из вашего конструктора DbConfig или app.config (соединений). Убедитесь, что вы смотрите на «правильную базу данных» (то есть, что вы просматриваете через какого-то проводника и с каким кодом в первую очередь подключаетесь) могут быть две разные вещи).

    Строительство:
    Убедитесь, что ваш проект установлен в «конфигурации» для автоматической сборки – это тоже может быть проблемой.