【发布时间】:2016-10-26 12:47:35
【问题描述】:
我正在开发公告板系统(作为我培训 asp.net mvc 的一部分)。我对数据建模有基本的了解,但我对创建模型的方式有疑问。核心逻辑是发布具有以下类别的房地产、汽车和服务的广告。最初我尝试使用 TPH 方法,但随后遇到了绑定我的模型和自动映射器配置的问题。现在我想使用零或一个关系。
我有一个广告模型:
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; }
}
Auto 和 service 模型与 Realty 模型具有相同的外键。
我的数据库上下文:
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) 建模的教科书示例。 weblogs.asp.net/manavi/…
标签: asp.net-core-mvc entity-framework-core