3

ASP.net MVC は初めてです。データの結合を表示するビューモデルを作成しようとしています。コード例を次に示します。

   public class Person
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }

    public ICollection<Relative> Relatives { get; set; }

}

public class Relative
{
    [Key]
    public int ID {get; set; }
    public Person Person { get; set; }
    public RelationType RelationType { get; set; }
}

public class RelationType
{
    [Key]
    public int ID { get; set; }
    public string Description { get; set; }
}

public class PersonViewModel
{
    public string Name { get; set; }
    public ICollection<string> RelativeNames { get; set; }
    public ICollection<string> RelativeTypes { get; set; }
}

public class PersonContext : DbContext
{
    public DbSet<PersonViewModel> people { get; set; }
}

Visual Studio でコントローラーを作成しようとすると、次のエラーが発生します。

PersonViewModel のメタデータを取得できません。生成中に 1 つ以上の検証エラーが検出されました: EntityType 'PersonViewModel' にはキーが定義されていません。この EntityType のキーを定義します。

4

2 に答える 2

3

エラーは一目瞭然です。上記のクラスで正しく行ったように、[Key] で装飾する必要がある PersonViewModel に Id フィールドを追加する必要があります。

于 2012-08-13T00:01:34.193 に答える
1

ビュー モデルは、コントローラーとビューの間でデータを渡すのに便利なクラスです。この例外が発生する理由は、PersonViewModel クラスを dbSet に渡しているためです。PersonViewModel クラスに対応するテーブルがない限り、これを行うことはできません。その場合、PersonViewModel はビュー モデルではなく、エンティティ、テーブルを表すモデル クラスである必要があります。

あなたのコードを見ると、データベースに Person と Relative のテーブルがあると思います。したがって、次のことを行う必要があります

public class PersonContext : DbContext
{
    public DbSet<Person> Person { get; set; }
    public DbSet<Relative> Relative { get; set; }

}

DbContext クラスの Person および Relative プロパティを介して PersonViewModel を設定します。これは、コントローラ内またはリポジトリ クラスがある場合はそのクラスで実行できます。

于 2012-08-13T00:02:19.313 に答える