gpt4 book ai didi

c# - EF代码先FLUENT : many to many with additional field in jointable

转载 作者:行者123 更新时间:2023-11-30 18:24:08 25 4
gpt4 key购买 nike

我正在构建一个 wiki,其中包含由子文章组成的文章。一篇文章可以包含多个子文章,一个子文章可以附加到多个文章。在 jointable 中有一个 sortorder,它定义了特定文章的子文章的显示。父文章仅包含标题(和元数据),没有文本,所有文本都通过子文章完成。

虽然可连接中的排序顺序是我在 atm 卡住的地方,但我无法通过查询访问它。希望有人能指出我正确的方向。

旁注:我在整个 MVC/EF 世界中都是新手,即使是 c#/vb 和 .NET 也是我几个月以来才在业余时间从事的工作。

我有这些类(class):

文章:

public class Article : BaseEntity
{

private ICollection<Category> _categories;
private ICollection<ArticleSubarticle> _subarticles;

public string Title { get; set; }
public int AuthorId { get; set; }
public DateTime CreationDate { get; set; }
public DateTime ?PublishDate { get; set; }
public DateTime ?ChangeDate { get; set; }
public bool Published { get; set; }

public virtual ICollection<Category> Categories
{
get { return _categories ?? (_categories = new List<Category>()); }
protected set { _categories = value; }
}

public virtual ICollection<ArticleSubarticle> Subarticles
{
get { return _subarticles ?? (_subarticles = new List<ArticleSubarticle>()); }
protected set { _subarticles = value; }
}

}

副文章

public class Subarticle : Article
{

private ICollection<Attachment> _attachments;

public string ArticleText { get; set; }
public int OriginalArticle { get; set; }
public bool Active { get; set; }

public virtual ICollection<Attachment> Attachments
{
get { return _attachments ?? (_attachments = new List<Attachment>()); }
protected set { _attachments = value; }
}

}

可联合:

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

}

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

现在我想要一篇文章及其子文章,它们按排序顺序排序。此查询为我提供了文章及其子文章,但我似乎无法弄清楚如何在 Wiki_Article_Subarticle_Mapping 表中找到此排序顺序。

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

关于c# - EF代码先FLUENT : many to many with additional field in jointable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com