この質問は、Code First Entity Framework Approach を使用してモデルの関連付けと継承で生成されるコードである Controllers に関するものです。
関連付けと継承を使用して次のモデルをセットアップしています。
[Table("User")]
public class User {
[Key]
public int UserId { get; set; }
public string Username { get; set; }
}
[Table("UserProfile")]
public class UserProfile {
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Key, ForeignKey("User")]
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual User User { get; set; }
}
[Table("Client")]
public class Client : UserProfile {
public bool Approved { get; set; }
}
次に、VS2010でコントローラーを生成し、テンプレートを「Entity Frameworkを使用して読み取り/書き込みアクションとビューを備えたコントローラー」に設定し、モデルクラスを「クライアント」に、データコンテキストクラスをコンテキストクラスに設定します。
これにより、次の Index メソッドが生成されます。
public class ClientController : Controller {
private DataContext db = new DataContext();
public ViewResult Index() {
var users = db.UserProfiles.Include(u => u.User);
return View(users.ToList());
}
...
}
次のようにならないのはなぜですか?
public class ClientController : Controller {
private DataContext db = new DataContext();
public ViewResult Index() {
var users = db.Clients.Include(u => u.User);
return View(users.ToList());
}
...
}
それともこれ?
public class ClientController : Controller {
private DataContext db = new DataContext();
public ViewResult Index() {
var users = db.UserProfiles.OfType<Client>().Include(u => u.User);
return View(users.ToList());
}
...
}
また、Create メソッドは
db.UserProfiles.Add(client);
以下が使用されないのはなぜだろうと思っていました。
db.Clients.Add(client);
どのアプローチを使用すべきかについての推奨事項はありますか?