2014-03-12 23 views
0

本周我一直在尝试继承,直到最近我还没有用过很多东西。MVC - 如何在DB和EDMX中最好地实现与TPT派生实体(DB优先)的多对多关系

最简单的说法是:我需要为供应商实施一个注册系统,供应商一旦确认就可以购买多个包装。我不想简单地创建Vendors类,而是想从Person实体中尝试Table-Per-Type继承。最初我有以下实现。

Implementation 1

此实现工作尽可能创造一个PersonLogin和验证帐户。然而,只要我尝试使用PersonLogin作为供应商,我意识到我被卡住了,因为每个人都必须是特定的子类型,并且不能是多个。

回到绘图板我去了:我重新设计了我的数据库,让Vendor从PersonLogin实体继承,PersonLogin从Person实体继承。

implementation 2

我现在正在实施这个第二个版本,但因为我是比较新的继承的世界我不知道我是否正确或有效地完成它。

我想找到完成此功能的最佳方法,无论我使用继承还是关系都无关紧要。

电流控制器动作添加软件包供应商:

[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(); 
} 

所有反馈意见或建议者居多,干杯。

回答

1

好问题和很好的调查。

我很想看看其他人发布的内容,但对于避免数据库继承而不是使用它的特殊情况,我'保存'TPT继承。

在您的供应商,个人的情况,我会用在组成继承和包括一个ForeignKey Vendor.PersonId

我不会在方案中使用继承的。

在那里,如果我有“基地型”产品与自己的属性有 “类别”,即我可能会使用继承将是一个例子:的 ClothingProduct,ToyProduct,ExperienceProduct等

有一个问题EF TPT的继承是在EF中使用继承的表格很容易 - 但是在一种情况下,卫星网站也使用原始数据和sql查询,并且我被告知它让数据访问更困难。

相关问题