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
バインドできません(できますか?) 。これは予測できた可能性があり、明らかですが、これをどのように解決しますか?Salary
Person
Employee
主な質問:
タイプごとに 1 つのコントローラーを作成する必要がPerson
ありEmployee
ますか?
タイプごとに 1 つの詳細、作成、削除、編集ビューを作成する必要がありますか、または 1 つだけを作成して、それらのビュー内で表示/編集/作成するオブジェクトのタイプをチェックする必要がありますか? POST Edit
アクションメソッドでバインディングを解決する方法を1つのコントローラーにするとしますか?
また、右の詳細、作成、削除、編集ビューに移動するときに、オブジェクトの両方で構成されるリストを含む1 つのインデックス ページがある場合、ビューでどのタイプのオブジェクトがリストにあるかをチェックする方法は?Person
Employee
私の頭に浮かぶ例示的な解決策:ビューとアクションのほかに、すべてのビューを含む2つのコントローラーPersonController
を作成します。次に、index.cshtml のリスト内のオブジェクトのタイプに基づいて、さまざまなビューが表示されます。EmployeeController
Index
EmployeeController