У меня возникли проблемы с попытками включить (кодовые) миграции для моей базы данных SQL Server Compact 4.0 для моего настольного приложения .NET.SQL Server CE-код Проблемы с первыми миграциями
Enable-Migrations
действительно работает, и каталог Migrations
создан. После этого, когда я пытаюсь запустить Add-Migration InitialMigration
, я получаю:
Доступ к файлу базы данных не допускается. [1914, имя файла = Logo.sdf, SeCreateFile]
Это первая проблема, но я решил, запустив Visual Studio как администратор ... не нравится это решение, а также делать, если не знаете позже он будет работать без запуска приложения в режиме администратора. Я позволяю эту проблему в стороне теперь ...
Моя строка соединения:
<add name="LogoContext"
connectionString="Data Source=Logo.sdf"
providerName="System.Data.SqlServerCE.4.0"/>`
Таким образом, после запуска Add-Migration InitialMigration
в режиме администратора, я получаю пустой миграции ... это нормально. Затем я удаляю миграцию и добавить новый класс:
using System;
using System.Collections.Generic;
public class Blog
{
public int ID { get; set; }
public string Title { get; set; }
}
добавить ссылку на класс контекста:
public class LogoContext : DbContext
{
public DbSet<Word> Words { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<Blog> Blogs { get; set; }
}
Затем запустите Add-Migration InitialMigration
снова и получить:
public partial class InitialMigration : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Blogs",
c => new
{
ID = c.Int(nullable: false, identity: true),
Content = c.String(maxLength: 4000),
})
.PrimaryKey(t => t.ID);
}
public override void Down()
{
DropTable("dbo.Blogs");
}
}
После запуска Update-Database
Я вижу:
Applying code-based migrations: [201304211225255_InitialMigration].
Applying code-based migration: 201304211225255_InitialMigration.
Running Seed method.
Теперь проблема возникает - в моем обозревателе серверов я изучаю базу данных Logo.sdf
и ее не содержит таблицу Blogs
! Я даже пытаюсь запустить этот код из моего приложения:
var db = new LogoContext();
db.Posts.Add(new Blog { Title= "moo" });
db.SaveChanges();
, чтобы проверить, если возможно, мой сервер Проводник не показывает таблицу .. но я получаю исключение:
Указанная таблица не существовать. [Блог]
Так миграция, очевидно, не применяется к моему Logo.sdf
файлу :(
Если удалить строку подключения из app.config
, подключение к локальному экземпляру SQL Server Express предполагаются. И там работает безупречно !! Когда я анализирую базу данных с помощью SQL Server Management Studio, я вижу новую Blogs
таблицу, а также системную таблицу метаданных о миграции ...
другой маленький кусочек информации:
Когда я снова пытаюсь запустить Update-Database
, я получаю «Нет ожидающих миграции на основе кода». Это говорит о том, что некоторые данные сохраняются в Logo.sdf
после ... хотя бы некоторых метаданных о миграции, но все же я могу " таблицу в проводнике сервера.
Я использую VS 2012 и EF 5.0.
Пожалуйста, помогите мне понять это ... Мне кажется, что что-то серьезно не так, потому что оно просто работает с экземпляром SQL Server Express, но не с SQL Server CE 4.0. : ((
Спасибо Дэвид
Предложите, чтобы вы начали с полного пути к файлу базы данных в вашей строке подключения, я полагаю, у вас есть несколько копий файла базы данных, например, в папке bin/debug – ErikEJ
Хм я тоже подумал об этом, но я «удостоверился», что VS обратился к правильному логотипу Logo.sdf, удалив версию bin/Debug ... Я никогда не тестировал ее с абсолютными путями, потому что я исключил вариант, который может быть где-то в третьей копии файла db. .. И там это, в «C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Logo.sdf" ... так, чтобы тайна была решена - спасибо .. Так что у меня действительно есть использовать абсолютный путь к файлу? Когда я компилирую решение, файл конфигурации скомпилированного приложения также содержит абсолютный путь, который не является хорошим ...? – davidhq
Используйте полный путь во время разработки или лучше инициализируйте контекст строкой соединения, которую вы создаете в коде. – ErikEJ