本周我一直在尝试继承,直到最近我还没有多少用过。
简单来说:我需要为供应商实施注册系统,一旦验证可以购买多个软件包。我不是简单地创建Vendors类,而是想从Person实体中尝试Table-Per-Type继承。最初我有以下实现。
此实现可以创建PersonLogin并验证帐户。但是,当我尝试将PersonLogin用作供应商时,我意识到我被卡住了,因为每个人必须属于特定的子类型,并且不能是多个。
回到绘图板我去了:我重新设计了我的数据库,让供应商从PersonLogin实体继承,而PersonLogin继承自Person实体。
我现在正在实施第二个版本,但由于我对继承世界相对较新,我不确定我是否已经正确或有效地完成了。
我想找到实现此功能的最佳方法,无论我使用继承还是关系都无关紧要。
用于向供应商添加包的当前控制器操作:
[HttpPost]
public ActionResult RegisterPackage(int packageID, int personID)
{
if (ModelState.IsValid)
{
db.PackagesInVendors.Add(new PackagesInVendor() { PackageID = packageID, VendorID = personID });
db.SaveChanges();
return View("Index");
}
ViewBag.Packages = new SelectList(db.Packages, "ID", "Name", packageID);
ViewBag.People = new SelectList(db.People, "PersonID", "Email", personID);
return View();
}
欢迎所有反馈或建议,干杯。
答案 0 :(得分:1)
好问题和好的调查。
我热衷于看到其他人发布的信息,但我保存了#39;对于特殊情况的TPT继承,其中避免数据库继承比使用它更有效。
在Vendor-Person场景中,我将使用组合而不是继承,并包含ForeignKey Vendor.PersonId
在你的场景中,我根本不会使用继承。
我可以使用继承的一个例子是,如果我有基本类型'有的产品 '分类'有自己的属性,即: 服装产品,玩具产品,体验产品等
EF TPT继承的一个问题是它很容易使用EF中的继承表 - 但在一种情况下,卫星网站也使用原始数据和SQL查询,我被告知它为它们提供了数据访问权限更难。