gpt4 book ai didi

asp.net-mvc - ASP MVC 多对多关系 - 从关联表中检索数据

转载 作者:行者123 更新时间:2023-12-04 05:40:20 25 4
gpt4 key购买 nike

我试图首先使用 EF 代码创建一个具有多对多关系的数据库。

public class Item
{
public int ItemId { get; set; }
public String Description { get; set; }
public ICollection<Tag> Tags { get; set; }

public Item()
{
Tags = new HashSet<Tag>();
}
}

public class Tag
{
public int TagId { get; set; }
public String Text { get; set; }
public ICollection<Item> Presentations { get; set; }

public Tag()
{
Presentations = new HashSet<Item>();
}
}

public class ItemsEntities : DbContext
{
public DbSet<Item> Items { get; set; }
public DbSet<Tag> Tags { get; set; }
}

之后,我将一个项目添加到数据库中
var tag = new Tag { Text = "tag1" };
var item = new Item
{
Description = "description1",
Tags = new List<Tag>()
};
item.Tags.Add(tag);
using (var db = new ItemsEntities())
{
db.Items.Add(item);
db.SaveChanges();
}

问题是我无法输出带有关联标签的项目。 Controller 看起来像这样:
public ActionResult Index()
{
ItemsEntities db = new ItemsEntities();
return View(db.Items.ToList());
}

并且查看页面具有以下代码:

@foreach (var item in Model) 
{
<tr>
<td>
@Html.DisplayFor(model => item.Description)
</td>
<td>
@foreach (var tag in item.Tags)
{
@tag.Text
}
</td>
</tr>
}

我希望表格包含“description1”和“tag1”,但我只得到“description1”。我真的不明白问题出在哪里。这样做的正确方法是什么?

最佳答案

您的导航属性需要标记 virtual .

public class Item
{
public int ItemId { get; set; }
public String Description { get; set; }
public virtual ICollection<Tag> Tags { get; set; }

public Item()
{
Tags = new HashSet<Tag>();
}
}

public class Tag
{
public int TagId { get; set; }
public String Text { get; set; }
public virtual ICollection<Item> Presentations { get; set; }

public Tag()
{
Presentations = new HashSet<Item>();
}
}

关于asp.net-mvc - ASP MVC 多对多关系 - 从关联表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11337523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com