この質問は、コントローラのことです。このコードは、コードファーストエンティティフレームワークアプローチを使用してモデルの関連付けと継承で生成されるコードです。ASP.NET MVC 3モデル継承を使用したコントローラの作成
私は次のモデルのセットアップと関連付けと継承を持っています。
[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; }
}
私はその後、私のコンテキストクラスに、「クライアント」にModelクラスおよびデータコンテキストクラス「Entity Frameworkのを使用して、読み取りとコントローラ/アクションとビューを作成する」にテンプレートを設定し、VS2010でコントローラを生成します。
これは、次の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());
}
...
}
また、作成方法は、以下を使用しない理由は、私が思っていた
db.UserProfiles.Add(client);
を使用していますか?
db.Clients.Add(client);
どのアプローチを使用するべきですか?
このインスタンスでは、継承のためにdb.UserProfiles.OfType()。インクルード(u => u.User)とdb.UserProfiles.Add(クライアント)を使用する必要がありますか? –
いいえ、db.Client.Add(クライアント)のみを使用しますが、問題はありませんが、データは単一の表にのみ格納されます。「UserProfiles」とその中に弁別子「client」があります。すべてこれは自動的に起こります。 db.UserProfiles.OfTypeまたはdb.clientの両方を使用できますが、どちらも同じ結果を返します。 Visual Studioによって生成されたコードは、内部的な制限があるためです。開発者にはこのような制限はありません。 –