如何使用 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 模型优先检索数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用代码优先实体框架在 ASP.Net MVC3 中重新加载多对多导航属性

EF 4.1 代码优先:多对多

如何找到共享多对多关系的模型类型的所有对象?

雄辩的多对多对多 - 如何轻松加载远距离关系

当我使用中间模型时,如何建立强制唯一性的多对多关系?

如何首先在 EF 代码中建立模型和枚举之间的多对多关系?