1

Я только позволили миграции в моем проекте и добавил несколько полей UserProfile:миграции не изменяет мой стол

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public string Description { get; set;} 
    public DateTime? CreatedOn { get; set; } 
    public DateTime? LastAccess { get; set; } 
} 

Я Add-migration AddFieldsForUserProfile и создал:

... 
    public override void Up() 
    { 
     AddColumn("dbo.UserProfile", "Email", c => c.String()); 
     AddColumn("dbo.UserProfile", "Description", c => c.String()); 
     AddColumn("dbo.UserProfile", "CreatedOn", c => c.DateTime()); 
     AddColumn("dbo.UserProfile", "LastAccess", c => c.DateTime()); 
    } 
    ... 

Update-database -verbose дали этот вывод:

Target database is: 'Hifi.Models.HifiContext' (DataSource: (localdb)\v11.0, Provider: System.Data.SqlClient, Origin: Convention). 
Applying code-based migrations: [201303311011083_AddFieldsForUserProfile]. 
Applying code-based migration: 201303311011083_AddFieldsForUserProfile. 
ALTER TABLE [dbo].[UserProfile] ADD [Email] [nvarchar](max) 
ALTER TABLE [dbo].[UserProfile] ADD [Description] [nvarchar](max) 
ALTER TABLE [dbo].[UserProfile] ADD [CreatedOn] [datetime] 
ALTER TABLE [dbo].[UserProfile] ADD [LastAccess] [datetime] 
[Inserting migration history record] 
Running Seed method. 

Очевидно, все прошло хорошо, но после получения эрро r, что coloumn CreatedOn не существует, я заглянул в базу данных с помощью Server Explorer и, действительно, все 4 coloumns отсутствуют в моей таблице UserProfile. Что я сделал не так?

Редактировать

Я нашел свою ошибку. Как-то у меня было два разных файла mdfaspnet-Hifi-20130330054424.mdf и Hifi.Models.HifiContext.mdf, у которых был тот же размер файла, и я предположил, что оба они необходимы. Мой проводник сервера использовал aspnetxx.mdf, и изменения базы данных были сделаны в HifiContext.mdf. Мне стыдно.

В связи с примечанием у меня возникли проблемы с правильным отображением списка всех зарегистрированных пользователей. Он всегда был пустым, я мог войти в систему безупречно. Почему-то для входа в систему aspnetxx.mdf был запрошен, но мой MemberListController запросил HifiContext.mdf. После изменения строки подключения у меня изначально не было зарегистрированных пользователей, новые были добавлены в HifiContext.mdf, и список работал правильно. Как это произошло?

+0

Вы уверены, что смотрите на правый Db? кажется, что. У вас возникли ошибки? Любые специальные разрешения и т. Д. Мой совет заключается в создании нового соединения (например, config и '') - и резервное копирование старого на всякий случай, то есть воссоздать Db с нуля. – NSGaga

+0

У меня нет другого и не было ошибок, пользователь, созданный в моем методе seed(), существует и другие. зарегистрированный ранее из моего приложения. ' ' – Sven

+0

попробуйте воссоздать, если вы только что включили миграцию - никакая другая идея – NSGaga

ответ

1

вы уверены, что вы смотрите на право Db?
похоже поэтому хотя. У вас возникли ошибки? Любые специальные разрешения и т. Д.

Мой совет - создать новое соединение - например, config и

<connectionStrings> 
    <add name="HifiContext" connectionString="Data Source=MACHINE\INSTANCE;Initial Catalog=HiFi;Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 
</connectionStrings>` 

... и резервное копирование вашего старого на всякий случай. то есть воссоздать Db с нуля

Если ничего не работает - попробуйте воссоздать, если вы только что включили миграцию - никаких других идей.

Что касается причин, по которым произошло несинхронизация - трудно сказать наверняка, - но я предполагаю, что у вас также были две строки соединения (или на каком-то уровне).

Убедитесь, что строка соединения «с именем» такой же, как ваш dbcontext - или поставить соединение на ваш на DbContext непосредственно

. Иногда это проблема, поскольку неясно, что EF/CF «делает» своим дефолтом.

0

называют этот метод в коде запуска, что база данных заново с новыми полями:

public void CheckForDBChanes() 
     { 

      Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>()); 
     } 
Смежные вопросы