如何使用 MVC3 多对多关系和 EF4.1 模型优先检索数据?
Posted
技术标签:
【中文标题】如何使用 MVC3 多对多关系和 EF4.1 模型优先检索数据?【英文标题】:How to retrieve data with MVC3 Many to Many relationship and EF4.1 Model First? 【发布时间】:2012-02-11 18:40:42 【问题描述】:我是一个非常初学者,我想做一些非常简单的事情,我想我错过了一些东西但我找不到答案。
我有两个用 EF4.1 映射的多对多关系表
public partial class Activity
public Activity()
this.Pack = new HashSet<Pack>();
public int ActivityId get; set;
public string Type get; set;
public string Title get; set;
public string Price get; set;
public virtual ICollection<Pack> Pack get; set;
public partial class Pack
public Pack()
this.Activity = new HashSet<Activity>();
public int PackId get; set;
public string Name get; set;
public string Description get; set;
public string Price get; set;
public virtual ICollection<Activity> Activity get; set;
并生成一个上下文类:
public partial class EvgDatabaseEntities : DbContext
public EvgDatabaseEntities()
: base("name=EvgDatabaseEntities")
public DbSet<Pack> PackSet get; set;
public DbSet<Activity> ActivitySet get; set;
在我的索引视图中,我只需要显示一个包中的数据,以及与这个包相关的活动。
这里是控制器:
public ActionResult Index()
var packs = evgDB.PackSet.Include("Activity").ToList();
return View(packs);
在我看来,这是我想做的事情:
@model IEnumerable<myEvg.Models.EvgDatabaseEntities>
@
ViewBag.Title = "Index";
@foreach (var pack in Model)
//SHOW PACK.ID PACK.DESCRIPTION
//SHOW THE ACTIVITIES RELATED TO THIS PACK
执行此操作的最佳方法/做法是什么? 我可以通过在我的 EDM 等中创建第三个表来做到这一点,但是有可能建立一个原生的多对多关系有什么意义呢?
对不起,如果你觉得很明显,那不是我,我只是一个初学者。
【问题讨论】:
不知何故你已经拥有了一切,一切看起来都是正确的。究竟是什么问题?特别是我不明白:“但是有可能建立一个原生的多对多关系有什么意义呢?” 这一切对我来说都很好,你有错误吗? 嗯,主要问题是:如何在代码中的注释中实现我想要做的事情://SHOW PACK.ID PACK.DESCRIPTION //显示与此包相关的活动,因为我不能做这样的事情(我知道这没有意义):@foreach(模型中的var pack)pack.activity.activities显示与包相关的所有活动。我应该在第一个中写另一个 foreach 吗?非常感谢您的回答。 【参考方案1】:下面是如何在 Code First 中做到这一点:
http://blogs.msdn.com/b/wriju/archive/2011/05/14/code-first-ef-4-1-building-many-to-many-relationship.aspx
您需要在数据库中拥有第三个表,否则该关系将存储在哪里?
【讨论】:
我的数据库中已经有了第三个表(我使用了“从模型生成数据库”)。谢谢你的回答。以上是关于如何使用 MVC3 多对多关系和 EF4.1 模型优先检索数据?的主要内容,如果未能解决你的问题,请参考以下文章