我有一个我从我的模型创建的数据库,它与下图非常相似:
然而,让它实际上与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)可以分配多个值。 < / 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,但没有用,但我很确定它可以这样做。
同样在文章创建视图中,我必须能够访问必须在其他表格的下拉列表中显示的信息。
如果我没有多对一的关系表大声笑,我可以做所有这些,它真的改变了我的一切。
答案 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; }
}
答案 1 :(得分:0)
如果您正在使用EF Code First并且只是寻找一个基本示例来开始使用MVC中的一对多关系实现,那么在线提供了许多示例。 Here is one of them on asp.net/mvc.