Недавно я взял проект CF5, выполненный другим коллегией, и я хотел бы добавить новую функцию, но у меня есть некоторые ошибки. Итак, я хотел бы создать автоматическое создание и автоматическую систему миграции для этого приложения.Первая миграция кода EF5 - Создание базы данных и ошибка миграции
Я добавил это, чтобы проверить состояние базы данных в app.cs конструктору:
using (var db = new DatabaseContext())
{
do
{
Cursor.Current = Cursors.WaitCursor;
// If DB already exists, tests his integrity
if (db.Database.Exists() == true)
{
bool isCompatible = false;
bool isMetadataMissing = false;
// Tests compatibility between DB and EF model
try
{
isCompatible = db.Database.CompatibleWithModel(true);
}
catch (Exception e)
{
// Exception has thrown because the database don't contains metadata informations
isCompatible = false;
isMetadataMissing = true;
m_Logger.Error("Error during checking compatibility of database : " + e.Message, e);
}
// If database is compatible, we quit de tests
if (isCompatible)
{
result = true;
isWorkRequired = false;
m_Logger.Debug("Database Ok");
Cursor.Current = Cursors.Default;
}
else
{
// If DB isn't compatible and metadata was found on database, we proceed the migration of database
if (!isMetadataMissing)
{
try
{
m_Logger.Debug("Migration needed on database");
db.Database.Initialize(true);
}
catch (Exception eMig)
{
result = false;
isWorkRequired = false;
m_Logger.Debug("Can't migrates database. "+eMig.Message);
Cursor.Current = Cursors.Default;
messageBoxViewModel = new MessageBoxViewModel(Resources.Resources.ErrorDBMetaError,
MessageBoxButton.OK, MessageBoxImage.Error);
messageBoxView = new MessageBoxView(messageBoxViewModel);
messageBoxView.ShowDialog();
}
}
else // Warns the user that there is a problem with the ConnexionString
{
result = false;
isWorkRequired = false;
m_Logger.Debug("Can't update database, the metadata is missing");
Cursor.Current = Cursors.Default;
messageBoxViewModel = new MessageBoxViewModel(Resources.Resources.ErrorDBMetaMissing,
MessageBoxButton.OK,MessageBoxImage.Error);
messageBoxView = new MessageBoxView(messageBoxViewModel);
messageBoxView.ShowDialog();
}
}
}
else
{
m_Logger.Debug("Database is Mising");
Cursor.Current = Cursors.Default;
messageBoxViewModel = new MessageBoxViewModel(Resources.Resources.QtCreateDB,
MessageBoxButton.YesNo,MessageBoxImage.Question);
messageBoxView = new MessageBoxView(messageBoxViewModel);
messageBoxView.ShowDialog();
if (messageBoxViewModel.Result == MessageBoxResult.Yes)
{
Cursor.Current = Cursors.WaitCursor;
m_Logger.Debug("Creating database");
db.Database.Create();
//db.Database.Initialize(true);
m_Logger.Debug("Adds roles objects");
// Adds initial data
m_Logger.Debug("Database created");
}
else
{
isWorkRequired = false;
}
}
} while (isWorkRequired);
}
После этого, базы данных были созданы, но никакие предыдущие миграции не применялись: -s Так что, если я хочу чтобы сделать «Add-migration», консоль сообщит мне, что есть некоторые миграции, ожидающие изменения.
Итак, я делаю «обновленную базу данных» вручную, но получаю эту ошибку: «Имена столбцов в каждой таблице должны быть уникальными. Имя столбца« Имя трека »в таблице« dbo.Segment »указано более одного раза«
Почему миграция не применялась при создании базы данных?
Может ли кто-нибудь мне помочь? Я новичок с cf5 :-) Спасибо,
Я предполагаю, что вы используете код в первую очередь. Можете ли вы добавить конфигурацию модели для объекта Segment? – margabit
Похож на проблему с конфигурацией отображения. Вы должны опубликовать образ модели (если вы примените модель сначала) или файл конфигурации карты (если вы также примените код). –