Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql ASP.NETMVC实体框架和关系_Mysql_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

Mysql ASP.NETMVC实体框架和关系

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

我正试图了解ASP.NETMVC,因为它来自Web表单背景

我有一个MySQL数据库,包含两个实体:

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”。