所以我嘗試了實體框架核心,並且遇到了第一對關係模型的問題。我試圖使用慣例形成的關係,具體如下:數據庫添加實體框架核心後,子模型列表爲空
的主要實體,與傳統的主鍵(ID)和集合導航屬性(位置的列表):
public class Site
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public int LocationCount { get; set; } = 1;
public List<Location> Locations { get; set; } = new List<Location>();
}
的依賴實體,與傳統的外鍵(SITEID)和參考導航屬性(網站):
public class Location
{
public int Id { get; set; }
public int SiteId { get; set; }
public Site Site { get; set; }
public int AreaCount { get; set; } = 1;
public Location(Site site) { SiteId = site.Id; }
}
而且因爲我希望每一個網站已經有至少一個位置,我把這個在SiteController的創建行動,嘗試創建依賴關係與校長一起TS:
[HttpPost]
public IActionResult Create(Site site)
{
_context.Sites.Add(site);
for (int i = 0; i < site.LocationCount; i++)
_context.Locations.Add(new Location(site));
_context.SaveChanges();
return RedirectToAction("Details", new { Name = site.Name });
}
然而,在詳細信息視圖,當我嘗試顯示創建的位置,該列表始終是空的:
<h2>@Model.Locations.Count Locations</h2>
@foreach (Location l in Model.Locations)
{
<div class="row">
<div class="col-sm-12">@l.Id</div>
</div>
}
就導致:
0 Locations
非常感謝您提供任何幫助,解釋我錯過了什麼!
編輯:按要求,這裏的站點控制器,它得到的模型數據的詳細信息查看詳細信息行動的主體:
public IActionResult Details(string name)
{
var model = _context.Sites.FirstOrDefault(a => a.Name == name);
if (model == null) model = new Site();
return View(model);
}
而且,每一個建議,我有固定在Site.Id之前設置Location.SiteId的問題有一個值,因爲直到調用SaveChanges()之後,Id纔會自動生成。不幸的是,結果(空位置列表)仍然是相同的:
[HttpPost]
public IActionResult Create(Site site)
{
int nextsiteid = _context.Sites.Count() + 1;
_context.Sites.Add(site);
for (int i = 0; i < site.LocationCount; i++)
_context.Locations.Add(new Location(siteid));
_context.SaveChanges();
return RedirectToAction("Details", new { Name = site.Name });
}
,改變了位置構造函數使用ID而不是實例:
public Location(int siteid) { SiteId = siteid; }
預先感謝任何進一步的建議!
如何從視圖中獲取數據? –
@AsifRaza我不確定我是否理解這個問題。你的意思是我如何從站點視圖獲取站點數據?只是通常的方式,聲明模型,填寫表單,並通過HttpPost將其提交給我在上面顯示的Create方法。不過,這些孩子不是通過創建視圖創建的。我只想在創建網站時創建一個或多個位置依賴項的「默認」實例。所以該位置沒有視圖。 – Jason
好吧,你只是傳遞父值,因爲你正在添加子數據我是對的 –