所以我尝试了实体框架核心,并且遇到了第一对关系模型的问题。我试图使用惯例形成的关系,具体如下:数据库添加实体框架核心后,子模型列表为空
的主要实体,与传统的主键(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
好吧,你只是传递父值,因为你正在添加子数据我是对的 –