Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF code first FLUENT:多对多,jointable中有附加字段_C#_Entity Framework_Many To Many_Code First_Fluent - Fatal编程技术网

C# EF code first FLUENT:多对多,jointable中有附加字段

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也是我几个月以来在业余时间才开始研究的东西 我有以下课程: 文章

我正在构建一个wiki,它包含由子文章组成的文章。一篇文章可以由多个子文章组成,一个子文章可以附加到多篇文章。在jointable中有一个排序器,用于定义特定项目的子项目的显示。 父文章只包含一个标题(和元数据),没有文本,所有文本都是通过子文章完成的

不过,jointable中的这个排序器是我卡在atm机上的地方,我无法从查询中访问它。希望有人能给我指出正确的方向

旁注:我在整个MVC/EF世界里都是新手,甚至c#/vb和.NET也是我几个月以来在业余时间才开始研究的东西

我有以下课程:

文章:

它们的映射如下:

文章

子条款

可接合的

这让我得到了预期的数据库

现在我想要一篇文章及其子文章,由巫师订购。 这个查询让我得到了文章及其子文章,但我似乎不知道如何在Wiki\u article\u Subarticle\u映射表中找到这个排序器

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();
}