处理MVC 4 ASP.NET中的“多对一”关系

时间:2014-03-03 01:34:50

标签: c# asp.net asp.net-mvc linq asp.net-mvc-4

我有一个我从我的模型创建的数据库,它与下图非常相似: enter image description here

然而,让它实际上与CRUD操作一起使用有点不同:(

所以我采用了自己的方法来处理'正常'表格并尝试使其正常工作,但我做不到。

这是我的DAL:

public class ArticleEntities : DbContext
{
    public DbSet<AgeGroup> AgeGroups { get; set; }
    public DbSet<Disabilities> Disabilitiess { get; set; }
    public DbSet<StrategyType> StrategyTypes { get; set; }
    public DbSet<Article> Articles { get; set; }
    public DbSet<UserProfile> Profiles { get; set; }
    public DbSet<DataToArticle> DataToArticles { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
    }
}

我想做什么

从网站的角度来看,我需要访问Article表的创建页面(视图) 并有AgeGroup,Disability和StrategyType的下拉列表。还可以在点击(例如加号)上添加更多下拉列表,因此每个类别(table-Age Group,Disability,StrategyType)可以分配多个值。enter image description here < / p>

我认为我的文章,AgeGroup,Disability,StrategyType正确完成。我添加了这一行:

public virtual List<DataToArticle> AgeGroupToArticle { get; set; }

让所有这些连接到DataToArticle表。我还将此代码添加到DataToArticle表中:

    public virtual AgeGroup AgeGroup { get; set; }

    public virtual Disabilities Disabilities { get; set; }

    public virtual StrategyType StrategyType { get; set; }

我认为需要做什么,但不知道如何

在ArticleController中,我知道我必须将其他表中的所有附加信息添加到其中。我试图使用Linq,但没有用,但我很确定它可以这样做。

同样在文章创建视图中,我必须能够访问必须在其他表格的下拉列表中显示的信息。

如果我没有多对一的关系表大声笑,我可以做所有这些,它真的改变了我的一切。

2 个答案:

答案 0 :(得分:3)

我认为让你失望的部分原因是你将所有关系放在一个表中的一行中。有几种不同的方法可以处理它,具体取决于相关类型是否真的需要是实体或只是值。如果只有值,那么您可以为旧的每种类型的值创建一个辅助表。在此表中,您将文章ID作为外键以及与之关联的值。这就是我如何做一对多的关系。

如果关联值实际上是实体(在我看来它不仅仅包含一个id和一个名称),那么每个实体类型都有一个连接表,其中包含键文章ID和实体ID。你真正建模的是文章和每个实体类型之间的多对多关系。

我会假设第一个案例是你真正想要的。在您的文章中,您将拥有年龄组,残疾和策略类型的属性。

public ICollection<AgeGroup> AgeGroups { get; set; }
public ICollection<Disability> Disabilities { get; set; }
public ICollection<StrategyType> StrategyTypes { get; set; }

在每个实体中,您都有id,文章ID和值,以及对相关文章的引用(通过文章ID),例如:

public class AgeGroup
{
     public int Id { get; set; }
     public int ArticleId { get; set; }
     public string AgeName { get; set; }

     public Article Article { get; set; }
}

Data model for article with multiple related age groups, disabilities, and strategy types

答案 1 :(得分:0)

如果您正在使用EF Code First并且只是寻找一个基本示例来开始使用MVC中的一对多关系实现,那么在线提供了许多示例。 Here is one of them on asp.net/mvc.