0

私は学ぼうとしていますEF Code first。最初に、ModelClass で DataAnnotation を使用してすべての制約を試しました。そして、仕事は順調です。
しかし、今はFluent APIスタンドアロン構成ファイルを使用して同じことを試みていますが、データベースを再作成できず、このエラーをスローします

データベースにモデル メタデータが含まれていないため、モデルの互換性を確認できません。モデルの互換性は、Code First または Code First Migrations を使用して作成されたデータベースに対してのみ確認できます。

これが私のモデルです

public Class User
{
    public string UserID { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
}

これが私のDbContextです

public class AppContext : DbContext
{
    public DbSet<User> Users { get; set; }

    //Public constructor to Call DropCreateDatabaseIfModelChanges method
    public AppContext()
    { 
        //Calling the Method to ReCreate the database
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<AppContext>());
    }

    //Overriding OnModelCreating Method to Configure the Model using Fluent API
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
         modelBuilder.Configuration.Add(new UserConfiguration());
    }
}

ここに私のUserConfigurationクラスがあります

public class UserConfiguration : EntityTypeConfiguration<User>
{
     public UserConfiguration()
     {
          //Using Fluent API to configure Model
          HasKey(x => x.UserID);
          Property(x => x.Username).IsRequired().HasMaximumLength(50);
          Property(x => x.Password).IsRequired().HasMaximumLength(50);

     }
}

どこが間違っているのかわかりません。どんな提案でも結構です。

注:EF 4.3.1を使用しています

編集メソッドに構成を直接配置すると、うまく機能します
Fluent APIOnModelCreating

//Overriding OnModelCreating Method to Configure the Model using Fluent API
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
         //Instead of Standalone Configuration file
         //modelBuilder.Configuration.Add(new UserConfiguration());

         //putting configuration here only
          modelBuilder.Entity<User>().HasKey(x => x.UserID);
          modelBuilder.Entity<User>().Property(x => x.Username).IsRequired().HasMaximumLength(50);
          modelBuilder.Entity<User>().Property(x => x.Password).IsRequired().HasMaximumLength(50);
    }

ただし、スタンドアロン構成ファイル、つまりクラスで機能しない理由はわかりません。何かUserConfiguration提案をお願いします

4

1 に答える 1

0

アプリケーションの他の部分でエラーが発生していました。これは、データベース スキーマが作成されたがdbo._MigrationHistory、sqlServer でテーブルを作成できないためです。つまり、必要な情報が存在しないため、Codefirst がデータベースを削除できないのです。データベースを削除すると、うまくいきましたが、ブラウザはキャッシュされたデータを表示していると思います。システムを再起動すると、すべてがうまくいきます。

于 2012-05-12T17:53:39.923 に答える