繁体   English   中英

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

[英]Handling a 'Many to One' Relationship in MVC 4 ASP.NET

我有一个我从我的模型创建的数据库,它与下图非常相似: 在此输入图像描述

然而,使它实际上与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)可以分配多个值。 在此输入图像描述

我认为我的文章,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,但没有用,但我很确定它可以这样做。

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

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

我认为让你失望的部分原因是你将所有关系放在一个表中的一行中。 有几种不同的方法可以处理它,具体取决于相关类型是否真的需要是实体或只是值。 如果只有值,那么您可以为旧的每种类型的值创建一个辅助表。 在此表中,您将文章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; }
}

具有多个相关年龄组,残疾和策略类型的文章的数据模型

如果您正在使用EF Code First并且只是寻找一个基本示例来开始使用MVC中的One to Many关系实现,那么在线提供了许多示例。 这是asp.net/mvc中的其中一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM