0

私はこのチュートリアル asp.net Movie Tutorial を勉強していて、モデルに 2 つの単純なファイルがあります。

 public class Movie
{
    public int ID { get; set; }

    [Required]
    public string Title { get; set; }


}

public class MovieDBContext : DbContext
{
    public DbSet<Movie> Movies { get; set; }


}

もう 1 つは、Visual Studio が提供するアカウント モデルです。

 public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
}

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }


}

問題は....プロパティを追加すると

 public int aaa { get; set; }

UserProfile クラスに、移行で変更はありません....これは、移行が MovieDBContext 内にあるクラスのみを更新するために発生します....したがって、次のようなものを追加する必要があります。

public class MovieDBContext : DbContext
{
    public DbSet<Movie> Movies { get; set; }
    public DbSet<UserProfile> User{get;set} 

}

問題は、別のプロジェクトで AccountModel を更新しようとしていて、この解決策を試しましたが、うまくいかなかったことです..誰か別の解決策を知っていますか?

4

4 に答える 4

0

すべてのテーブルを 1 つのDbContextクラスに配置する必要があります。

その後、すべてが正しく機能します。

于 2013-04-03T17:50:20.773 に答える
0

Entity Framework は 1 つの DbContext のみを移行します。限目。現状、これを回避する方法はありません。つまり、EF が処理する必要があるすべてのものが、この単一のコンテキスト内になければならないということです。

ただし、別の目的で他のコンテキストを使用することを妨げるものではありません。したがって、MovieDBContext先に進み、UserProfileエンティティ セットを追加します。

public DbSet<UserProfile> User { get; set; }

次に、他のコンテキストでは、1) それらが同じデータベースと対話することを確認し、2) 初期化戦略がないことを確認する必要があります。

public class AccountsContext : DbContext
{
    public AccountsContext()
        : base("name=ConnectionStringNameHere")
    {
        Database.SetInitializer(null);
    }

    public DbSet<UserProfile> User { get; set; }
    ...
}

これにより、EF はこのコンテキストを既存のデータベースへのマッピングとして扱うため、データベース テーブルや移行などを作成しようとしません。すべてはプライマリ コンテキスト (MovieDbContextこの場合) を介して行われます。

于 2013-04-03T18:34:43.537 に答える