C# EF code first FLUENT:多对多,jointable中有附加字段
我正在构建一个wiki,它包含由子文章组成的文章。一篇文章可以由多个子文章组成,一个子文章可以附加到多篇文章。在jointable中有一个排序器,用于定义特定项目的子项目的显示。 父文章只包含一个标题(和元数据),没有文本,所有文本都是通过子文章完成的 不过,jointable中的这个排序器是我卡在atm机上的地方,我无法从查询中访问它。希望有人能给我指出正确的方向 旁注:我在整个MVC/EF世界里都是新手,甚至c#/vb和.NET也是我几个月以来在业余时间才开始研究的东西 我有以下课程: 文章: 它们的映射如下: 文章 子条款 可接合的 这让我得到了预期的数据库 现在我想要一篇文章及其子文章,由巫师订购。 这个查询让我得到了文章及其子文章,但我似乎不知道如何在Wiki\u article\u Subarticle\u映射表中找到这个排序器C# EF code first FLUENT:多对多,jointable中有附加字段,c#,entity-framework,many-to-many,code-first,fluent,C#,Entity Framework,Many To Many,Code First,Fluent,我正在构建一个wiki,它包含由子文章组成的文章。一篇文章可以由多个子文章组成,一个子文章可以附加到多篇文章。在jointable中有一个排序器,用于定义特定项目的子项目的显示。 父文章只包含一个标题(和元数据),没有文本,所有文本都是通过子文章完成的 不过,jointable中的这个排序器是我卡在atm机上的地方,我无法从查询中访问它。希望有人能给我指出正确的方向 旁注:我在整个MVC/EF世界里都是新手,甚至c#/vb和.NET也是我几个月以来在业余时间才开始研究的东西 我有以下课程: 文章
public IList<Article> getArticleByIdWithSortedSubarticles(int ArticleId)
{
var query = _articleRepository.Table;
query = query.Where(a => ArticleId == a.Id)
.Select(a => a);
var subarticles = query.ToList();
return subarticles;
}
public IList GetArticleById和SortedSubarticle(int-ArticleId)
{
var query=\u articleRepository.Table;
query=query.Where(a=>ArticleId==a.Id)
.选择(a=>a);
var subticles=query.ToList();
返回子节;
}
有什么想法吗
提前谢谢 您的查询当前没有加载子节,因此我猜它们是延迟加载的。尝试按如下方式显式加载它们:
public IList<Article> getArticleByIdWithSortedSubarticles(int ArticleId)
{
var query = _articleRepository.Table;
query = query.Where(a => ArticleId == a.Id)
.Select(a => new { article = a, subs = a.SubArticles.OrderBy(s => s.SortOrder) });
return query.AsEnumerable().Select(m => m.article).ToList();
}
public IList GetArticleById和SortedSubarticle(int-ArticleId)
{
var query=\u articleRepository.Table;
query=query.Where(a=>ArticleId==a.Id)
.Select(a=>new{article=a,subs=a.SubArticles.OrderBy(s=>s.SortOrder)});
return query.AsEnumerable().Select(m=>m.article.ToList();
}
子节正在加载(我假设通过定义的关系?)在任何情况下,我都会得到我的子节列表…是的,因为您使您的子节
集合虚拟
,从而启用延迟加载。但是这并不能保证任何排序。好吧,我已经尝试了你的建议,现在奇怪的是,我在a.subticles上得到了一个错误('文章不包含subticles的定义,并且找不到接受Article类型的第一个参数的扩展方法subticles(您是否缺少using指令或程序集引用。)。但当我键入您的建议(而不是复制粘贴)时对VS AutoRead确实给了我一个子文章,当我悬停A时,他肯定把它看成是参数文章。这里有什么建议吗?我对你的知识库不太了解,尤其是context.Articles.Where(…
public class ArticleSubarticle : BaseEntity
{
public int ParentId { get; set; }
public int ChildId { get; set; }
public int SortOrder { get; set; }
public virtual Article Parent { get; set; }
public virtual Subarticle Child { get; set; }
}
public ArticleMap () {
ToTable("Wiki_Article");
HasKey(a => a.Id);
Property(a => a.Title).HasColumnType("VARCHAR").HasMaxLength(250);
Property(a => a.AuthorId);
Property(a => a.PublishDate).IsOptional();
Property(a => a.ChangeDate).IsOptional();
HasMany(a => a.Categories)
.WithMany()
.Map(a => a.ToTable("Wiki_Article_Category_Mapping"));
}
public SubarticleMap()
{
ToTable("Wiki_Subarticle");
HasKey(sa => sa.Id);
Property(a => a.ArticleText)
.IsOptional()
.HasColumnType("TEXT");
Property(a => a.OriginalArticle)
.IsOptional();
HasMany(a => a.Attachments)
.WithMany()
.Map(a => a.ToTable("Wiki_Subarticle_Attachment_Mapping"));
}
public ArticleSubarticleMap()
{
ToTable("Wiki_Article_Subarticle_Mapping");
HasKey(asa => new { asa.ParentId, asa.ChildId });
HasRequired(asa => asa.Parent)
.WithMany(asa => asa.Subarticles)
.HasForeignKey(asa => asa.ParentId);
}
public IList<Article> getArticleByIdWithSortedSubarticles(int ArticleId)
{
var query = _articleRepository.Table;
query = query.Where(a => ArticleId == a.Id)
.Select(a => a);
var subarticles = query.ToList();
return subarticles;
}
public IList<Article> getArticleByIdWithSortedSubarticles(int ArticleId)
{
var query = _articleRepository.Table;
query = query.Where(a => ArticleId == a.Id)
.Select(a => new { article = a, subs = a.SubArticles.OrderBy(s => s.SortOrder) });
return query.AsEnumerable().Select(m => m.article).ToList();
}