Mysql ASP.NETMVC实体框架和关系
我正试图了解ASP.NETMVC,因为它来自Web表单背景 我有一个MySQL数据库,包含两个实体:Mysql ASP.NETMVC实体框架和关系,mysql,asp.net,asp.net-mvc,entity-framework,Mysql,Asp.net,Asp.net Mvc,Entity Framework,我正试图了解ASP.NETMVC,因为它来自Web表单背景 我有一个MySQL数据库,包含两个实体: artwork - id(PK), artistid(FK), name... artist - id(PK), artist, website... 我已经使用这个数据库以及ArtistController.cs和ArtworkController.cs创建了一个ADO.Net实体数据模型,它创建了相应的视图 现在,当我访问时,页面显示artwork表中所有行的列表,但是,它显示artist
artwork - id(PK), artistid(FK), name...
artist - id(PK), artist, website...
我已经使用这个数据库以及ArtistController.cs和ArtworkController.cs创建了一个ADO.Net实体数据模型,它创建了相应的视图
现在,当我访问时,页面显示artwork表中所有行的列表,但是,它显示artistid。我该如何展示艺术家的名字呢
更新:
public class artworklist
{
public List<artwork> ArtworkModelList { get; set; }
}
public partial class artwork
{
public int id { get; set; }
public Nullable<int> artistId { get; set; }
public string title { get; set; }
public Nullable<int> editionId { get; set; }
public virtual artist artist { get; set; }
public virtual edition edition { get; set; }
}
public class artistlist
{
public List<artist> ArtistModelList { get; set; }
}
public partial class artist
{
public artist()
{
this.artworks = new HashSet<artwork>();
}
public int id { get; set; }
public string artist1 { get; set; }
public string website { get; set; }
public virtual ICollection<artwork> artworks { get; set; }
}
@model Art.Model.ArtistList
@if (null == Model || null == Model.ArtistModelList || 0 == Model.ArtistModelList.Count)
{
<tr>
<td>There is no data.</td>
</tr>
}
else
{
foreach (var art in Model.ArtistModelList)
{
<tr>
<td>@@@art.artist</td>
</tr>
}
}
[HttpGet]
public ActionResult Art()
{
var model = new ArtistList();
using (var dbContext = new ArtContext())
{
var artists = (from m in dbContext.Artists
select new ArtistModel
{
ID = m.ID,
Artist1 = m.Artist1,
Website = m.Website,
Artworks = m.Artworks
}).ToList();
model.ArtistModelList = artists;
return View(model);
}
[HttpPost]
public ActionResult Art(Artist model)
{
Artist art = new Artist();
art.ID = model.ID,
art.Artist1 = model.Artist1,
art.Website = model.Website,
art.Artworks = model.Artworks
using (ArtContext db = new ArtContext())
{
db.Artists.Add(art);
db.SaveChanges();
return RedirectToAction("*****", "*****"); // where you want (action,url)
}
}
在数据库中,艺术家表中的字段名为“艺术家”,但在创建实体数据模型时,Visual Studio将其命名为“艺术家1”
我尝试了“@Html.DisplayFor(modelItem=>item.artist.artist)”,但仍然显示艺术家id
艺术品类别:
public partial class artwork
{
public int id { get; set; }
public Nullable<int> artistId { get; set; }
public string title { get; set; }
public Nullable<int> editionId { get; set; }
public virtual artist artist { get; set; }
public virtual edition edition { get; set; }
}
艺术品视图代码:
@model IEnumerable<myflatfile.artwork>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.artist1)
</th>
<th>
@Html.DisplayNameFor(model => model.title)
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.artist.artist1)
</td>
<td>
@Html.DisplayFor(modelItem => item.title)
</td>
</tr>
}
</table>
@model IEnumerable
@{
ViewBag.Title=“Index”;
}
指数
@ActionLink(“新建”、“创建”)
@DisplayNameFor(model=>model.artist1)
@DisplayNameFor(model=>model.title)
@foreach(模型中的var项目){
@DisplayFor(modeleItem=>item.artist.artist1)
@DisplayFor(modeleItem=>item.title)
}
很简单,如果我得到了你,你使用的是实体框架,那么每个艺术品实体都有艺术家的对象,它在db中引用。
因此,您需要做的就是:
@Html.DisplayFor(modelItem=>item.artist.name)
编辑:
我想到了一个解决方法,你可以在Artwork controller中操作对象,然后将其传递到视图并添加名称和你需要的任何内容这很简单如果我得到了你,你使用的是实体框架,那么每个Artwork实体都有它在db中引用的艺术家对象。 因此,您需要做的就是:
@Html.DisplayFor(modelItem=>item.artist.name)
编辑:
我想到了一个解决办法,你可以在Artwork controller中操纵对象,然后再将其传递到视图,添加名称和你需要的任何内容我用记事本为你准备了一些东西,我有点困了。因此,如果它有错误,请再次写信给我 艺术品类:
public class artworklist
{
public List<artwork> ArtworkModelList { get; set; }
}
public partial class artwork
{
public int id { get; set; }
public Nullable<int> artistId { get; set; }
public string title { get; set; }
public Nullable<int> editionId { get; set; }
public virtual artist artist { get; set; }
public virtual edition edition { get; set; }
}
public class artistlist
{
public List<artist> ArtistModelList { get; set; }
}
public partial class artist
{
public artist()
{
this.artworks = new HashSet<artwork>();
}
public int id { get; set; }
public string artist1 { get; set; }
public string website { get; set; }
public virtual ICollection<artwork> artworks { get; set; }
}
@model Art.Model.ArtistList
@if (null == Model || null == Model.ArtistModelList || 0 == Model.ArtistModelList.Count)
{
<tr>
<td>There is no data.</td>
</tr>
}
else
{
foreach (var art in Model.ArtistModelList)
{
<tr>
<td>@@@art.artist</td>
</tr>
}
}
[HttpGet]
public ActionResult Art()
{
var model = new ArtistList();
using (var dbContext = new ArtContext())
{
var artists = (from m in dbContext.Artists
select new ArtistModel
{
ID = m.ID,
Artist1 = m.Artist1,
Website = m.Website,
Artworks = m.Artworks
}).ToList();
model.ArtistModelList = artists;
return View(model);
}
[HttpPost]
public ActionResult Art(Artist model)
{
Artist art = new Artist();
art.ID = model.ID,
art.Artist1 = model.Artist1,
art.Website = model.Website,
art.Artworks = model.Artworks
using (ArtContext db = new ArtContext())
{
db.Artists.Add(art);
db.SaveChanges();
return RedirectToAction("*****", "*****"); // where you want (action,url)
}
}
我用记事本给你准备了一些东西,我有点困了。因此,如果它有错误,请再次写信给我 艺术品类:
public class artworklist
{
public List<artwork> ArtworkModelList { get; set; }
}
public partial class artwork
{
public int id { get; set; }
public Nullable<int> artistId { get; set; }
public string title { get; set; }
public Nullable<int> editionId { get; set; }
public virtual artist artist { get; set; }
public virtual edition edition { get; set; }
}
public class artistlist
{
public List<artist> ArtistModelList { get; set; }
}
public partial class artist
{
public artist()
{
this.artworks = new HashSet<artwork>();
}
public int id { get; set; }
public string artist1 { get; set; }
public string website { get; set; }
public virtual ICollection<artwork> artworks { get; set; }
}
@model Art.Model.ArtistList
@if (null == Model || null == Model.ArtistModelList || 0 == Model.ArtistModelList.Count)
{
<tr>
<td>There is no data.</td>
</tr>
}
else
{
foreach (var art in Model.ArtistModelList)
{
<tr>
<td>@@@art.artist</td>
</tr>
}
}
[HttpGet]
public ActionResult Art()
{
var model = new ArtistList();
using (var dbContext = new ArtContext())
{
var artists = (from m in dbContext.Artists
select new ArtistModel
{
ID = m.ID,
Artist1 = m.Artist1,
Website = m.Website,
Artworks = m.Artworks
}).ToList();
model.ArtistModelList = artists;
return View(model);
}
[HttpPost]
public ActionResult Art(Artist model)
{
Artist art = new Artist();
art.ID = model.ID,
art.Artist1 = model.Artist1,
art.Website = model.Website,
art.Artworks = model.Artworks
using (ArtContext db = new ArtContext())
{
db.Artists.Add(art);
db.SaveChanges();
return RedirectToAction("*****", "*****"); // where you want (action,url)
}
}
您错误地使用了
DisplayFor
。它用作显示数据的模板
应该用作
@Html.DisplayFor(modelItem => modelItem.artist.artist1)
但是你有一个模型的列表。因此,我建议创建一个局部视图,将艺术品作为模型
@model artwork
<tr>
<td>
@Html.DisplayFor(m=> m.artist.artist1)
</td>
<td>
@Html.DisplayFor(m=> m.title)
</td>
</tr>
或者,如果希望保持简单,只需直接渲染属性即可
大体上
@foreach (var item in Model) {
Html.RenderPartial("partialViewName", item);
}
@foreach (var item in Model) {
<tr>
<td>
@item.artist.artist1
</td>
<td>
@item.artist.artist1.title
</td>
</tr>
}
@foreach(模型中的变量项){
@项目1.artist.artist1
@项目.艺术家.艺术家1.头衔
}
您以错误的方式使用了DisplayFor
。它用作显示数据的模板
应该用作
@Html.DisplayFor(modelItem => modelItem.artist.artist1)
但是你有一个模型的列表。因此,我建议创建一个局部视图,将艺术品作为模型
@model artwork
<tr>
<td>
@Html.DisplayFor(m=> m.artist.artist1)
</td>
<td>
@Html.DisplayFor(m=> m.title)
</td>
</tr>
或者,如果希望保持简单,只需直接渲染属性即可
大体上
@foreach (var item in Model) {
Html.RenderPartial("partialViewName", item);
}
@foreach (var item in Model) {
<tr>
<td>
@item.artist.artist1
</td>
<td>
@item.artist.artist1.title
</td>
</tr>
}
@foreach(模型中的变量项){
@项目1.artist.artist1
@项目.艺术家.艺术家1.头衔
}
什么是artist1专栏?根据提供的信息,它应该是@Html.DisplayFor(modelItem=>item.artist.name)@SteveGreene我相信artist1列是艺术家的姓名字段。Visual Studio创建的ADO.Net实体数据模型出于某种原因将其命名为“artist1”,而不是“artist”。没错,字段名不能与类同名。您可能需要将其重命名为“name”以使其更清晰。artist1列是什么?根据提供的信息,它应该是@Html.DisplayFor(modelItem=>item.artist.name)@SteveGreene我相信artist1列是艺术家的姓名字段。Visual Studio创建的ADO.Net实体数据模型出于某种原因将其命名为“artist1”,而不是“artist”。没错,字段名不能与类同名。您可能需要将其重命名为“name”以使其更清晰。artist1列是什么?根据提供的信息,它应该是@Html.DisplayFor(modelItem=>item.artist.name)@SteveGreene我相信artist1列是艺术家的姓名字段。Visual Studio创建的ADO.Net实体数据模型出于某种原因将其命名为“artist1”,而不是“artist”。没错,字段名不能与类同名。您可能希望将其重命名为“名称”以使其更清晰。“艺术家”实体没有“名称”字段。在数据库中,它被命名为“artist”,Visual Studio创建的ADO.Net实体数据模型将其命名为“artist1”。“artist”实体没有“name”字段。在数据库中,它被命名为“artist”,Visual Studio创建的ADO.Net实体数据模型将其命名为“artist1”。“artist”实体没有“name”字段。在数据库中,它被命名为“artist”,VisualStudio创建的ADO.Net实体数据模型将其命名为“artist1”。