デスクトップ .NET アプリの SQL Server Compact 4.0 データベースの (コード ファースト) 移行を有効にしようとすると、多くの問題が発生します。
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 では動作しないため、何か重大な問題があるように見えます。:(((
ありがとうございました!デビッド