7

デスクトップ .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 では動作しないため、何か重大な問題があるように見えます。:(((

ありがとうございました!デビッド

4

1 に答える 1