3

Entity Framework (ASP.NET-MVC コンテキストでも) を使用した継承に関する記事をたくさん読んだことがありますが、誰もがデータベース側の問題について書いていますが、問題のビュー側については誰も取り上げていません。

モデルクラスを取得しました:

public class Person {
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}
public class Employee : Person {
    public int? Salary { get; set; }
}

そして保持する dbContext には次のものが含まれます。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> {

    public DbSet<Person> Persons { get; set; }

    public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) {
        Configuration.LazyLoadingEnabled = true;
        Configuration.ProxyCreationEnabled = true;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }

    public static ApplicationDbContext Create() {
        return new ApplicationDbContext();
    }
}

追加の質問: dbContext にも保持する必要がありpublic DbSet<Employee> Employees { get; set; }ますか?

ここで、Controllers ディレクトリをクリックして右クリックし、次のように [Add Controller] をクリックします。

ここに画像の説明を入力

結果は、クラスのインデックス、詳細、作成、削除、編集アクションでコントローラーを取得していますPerson

Personsあるものを含むすべてがリストEmployeesに表示されIndex.cshtmlます。Details.cshtmlビューでは、従業員は表示Salaryされません。Edit.cshtmlビューでは、従業員Salaryは編集できません (表示されません) 。さらに アクションはxorを編集したかどうかに応じてPOST Editバインドできません(できますか?) 。これは予測できた可能性があり、明らかですが、これをどのように解決しますか?SalaryPersonEmployee

主な質問:

タイプごとに 1 つのコントローラーを作成する必要がPersonありEmployeeますか?

タイプごとに 1 つの詳細、作成、削除、編集ビューを作成する必要がありますか、または 1 つだけを作成して、それらのビュー内で表示/編集/作成するオブジェクトのタイプをチェックする必要がありますか? POST Editアクションメソッドでバインディングを解決する方法を1つのコントローラーにするとしますか?

また、右の詳細、作成、削除、編集ビューに移動するときに、オブジェクトの両方で構成されるリストを含む1 つのインデックス ページがある場合、ビューでどのタイプのオブジェクトがリストにあるかをチェックする方法は?PersonEmployee

私の頭に浮かぶ例示的な解決策:ビューとアクションのほかに、すべてのビューを含む2つのコントローラーPersonControllerを作成します。次に、index.cshtml のリスト内のオブジェクトのタイプに基づいて、さまざまなビューが表示されます。EmployeeControllerIndexEmployeeController

4

0 に答える 0