私は掲示板システムを開発中です(asp.net mvcのトレーニングの一環として)。私はデータモデリングについて基本的な理解を持っていますが、私は自分のモデルを作成した方法を疑うことがあります。コアロジックは、以下のカテゴリのrealty、auto、およびserviceの広告を投稿することです。最初はTPHアプローチを使用しようとしましたが、私のモデルとオートマッパの設定をバインドするという問題に直面しました。今私はゼロまたは1つの関係を使用すると思います。関連エンティティの更新
私が広告モデルを持っている:
public class Ad
{
public int ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public virtual Realty Realty { get; set; }
public virtual Auto Auto { get; set; }
public virtual Service Service { get; set; }
}
不動産:
public class Realty
{
[Key]
[ForeignKey("Ad")]
public int AdID { get; set; }
public string Type { get; set; }
public string NumberOfRooms { get; set; }
public virtual Ad Ad { get; set; }
}
自動車とサービスモデルがリアルティモデルと同じ外部キーを持っています。
マイデシベルコンテキスト:
public DbSet<Ad> Ads { get; set; }
public DbSet<Realty> Realties { get; set; }
public DbSet<Auto> Autos { get; set; }
public DbSet<Service> Services { get; set; }
は、私が唯一の関連するモデルとアップデートの広告モデルを必要としています。それは一緒にすべての関連モデルとの広告を掲載することが可能になりますことを、
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "Title,Descirpiton,Realty,Auto,Service")] Ad ad)
{
if (ModelState.IsValid)
{
db.Ads.Add(ad);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
ViewBag.ID = new SelectList(db.Autos, "AdID", "CarType", ad.ID);
ViewBag.ID = new SelectList(db.Realties, "AdID", "Type", ad.ID);
ViewBag.ID = new SelectList(db.Services, "AdID", "ServiceType", ad.ID);
return View(ad);
}
問題:私は、すべての関連のモデルを含んで足場コントローラのアクションを、使用しています。深く潜り込む前に、私はこれを正しい方法でやっていることを確認したかったのです。
ありがとうございました。
これは、Table Per Type(TPT)モデリングの教科書の例のようです。 https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt – Bill