所以我是实体框架的新手。我在将数据库保存到数据库时遇到问题。
在控制器中创建方法:
public async Task<IActionResult> Create([Bind("NieuwsArtikelID,titel,datum,imgNaam")] NieuwsArtikel nieuwsArtikel,
[Bind("blog.inleiding", "blog.inleidingTitel")] Blog blog, [Bind("blog.alinea[i].AlineaTitel", "blog.alinea[i].AlineaTekst")] List<Alinea> alineas)
{
if (ModelState.IsValid)
{
nieuwsArtikel.blog = blog;
nieuwsArtikel.blog.alineas = alineas;
_context.Add(nieuwsArtikel);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(nieuwsArtikel);
}
将博客数据保存在数据库中工作正常,但保存alinea数据不会起作用。它可能不起作用,因为它是一个列表。问题是:如何在数据库中保存列表对象?
NieuwsArtikel课程:
public class NieuwsArtikel
{
public int NieuwsArtikelID { get; set; }
public string titel { get; set; }
public string datum { get; set; }
public Blog blog { get; set; }
public string imgNaam { get; set; }
}
博客课程:
public class Blog
{
public int BlogID {get; set;}
public string inleidingTitel { get; set; }
public string inleiding { get; set; }
public List<Alinea> alineas { get; set; }
}
Alinea班:
public class Alinea
{
public int AlineaID { get; set; }
public string AlineaTitel { get; set; }
public string AlineaTekst { get; set; }
public string AlineaQuote { get; set; }
public string AlineaFoto { get; set; }
public int BlogForeignKey { get; set; }
public Blog blog { get; set; }
}
创建视图:
<form asp-action="Create">
<div class="form-horizontal">
<h4>NieuwsArtikel</h4>
<hr />
<!--Alinea begin-->
@for (int i = 0; i < 2; i++)
{
<div class="form-group">
<label asp-for="blog.alineas[i].AlineaTitel" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="blog.alineas[i].AlineaTitel" class="form-control" />
<span asp-validation-for="blog.alineas[i].AlineaTitel" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="blog.alineas[i].AlineaTekst" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="blog.alineas[i].AlineaTekst" class="form-control" />
<span asp-validation-for="blog.alineas[i].AlineaTekst" class="text-danger"></span>
</div>
</div>
}
<!-- Alinea eindig-->
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
我只放入了Alinea表格组,以使其更具可读性。
答案 0 :(得分:0)
if (ModelState.IsValid)
{
nieuwsArtikel.blog = blog;
nieuwsArtikel.blog.alineas = alineas;
_context.Add(nieuwsArtikel);
foreach (Aliena a in alienas)
{
_context.Add(a);
}
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(nieuwsArtikel);
现在,如果Aliena对象需要外键引用,则必须单独保存它们,因为您不知道nieuwsArtikel对象的ID,直到稍后(如果您在数据库中使用Identity列) )。如果您不这样做,只需将其更改为:
a.foreign_key_property_here = nieuwsArtikel.primary_key_property_here
在调用add之前。这应该做得很好。
还有其他选择。例如,您可以在SQL中使用用户定义的表,并使用存储过程一次发送两组数据。然后,您可以使用OUTPUT子句输出外键引用,并将aliena记录保存在同一事务中。或者你可以将aliena作为XML传递给存储过程并以这种方式保存它们。