实体框架 - 在多个数据库集中导航

本文关键字:数据库 集中 导航 框架 实体 | 更新日期: 2023-09-27 17:59:01

假设我有这些模型:

public class TextDocument
{
   public int Id { get; set; }
   public string Name { get; set; }
   public virtual List<Paragraph> Paragraphs { get; set; }
}
public class Paragraph
{
   public virtual TextDocument Document { get; set; } 
   public int Order { get; set; }
   public string Text { get; set; }
}
public class Image
{
    public virtual Paragraph Paragraph {get; set; }
    public virtual TextDocument Document { get; set; } 
    public string Url { get; set }
}

现在,我需要在TextDocumentsParagraphsImagesParagraphs TextDocumentsImages ParagraphsImages TextDocuments等中导航。

如何"连接"模型?我要问的是:

  1. 如何制作数据上下文?仅适用于文本文档?
  2. 有了这个,我如何获得,例如,在不知道 ID 等的情况下获得所有图像?

实体框架 - 在多个数据库集中导航

这个问题不清楚。另外,您的模型有点奇怪。 TextDocument不包括Image的列表。但Image两者都包括 ParagraphTextDocument 的后退导航 .我认为您需要将Image列表添加到Paragraph并从Image中删除TextDocument.这样,您将使Document具有Pharagraph s,并使Pharagraph具有Image s;

public class TextDocument
{
   public int Id { get; set; }
   public string Name { get; set; }
   public virtual List<Paragraph> Paragraphs { get; set; }
}
public class Paragraph
{
   public virtual TextDocument Document { get; set; } 
   public int Order { get; set; }
   public string Text { get; set; }
   public virtual List<Image> Images { get; set; }
}
public class Image
{
    public virtual Paragraph Paragraph {get; set; }
    public string Url { get; set }
}

若要创建上下文,请创建从 DbContext 派生的类,并添加实体集;

public class MyContext : DbContext
{
    public DbSet<Image> Images { get; set; }
    public DbSet<TextDocument> TextDocuments { get; set; }
    public DbSet<Paragraph> Paragraphs { get; set; }
}

获取 id 等于 3 的特定文本文档的图像;

using(MyContext context = new MyContext())
{
    var temp = context.TextDocuments.Include("Paragraph.Image").Where(q => q.Id == 3);
    var imageList = temp.Paragraphs.Select(q => q.Images).ToList();
}

选择所有图像;

using(MyContext context = new MyContext())
{
    var allImages = context.Images.ToList();
}

请参阅此博客文章,其中包含有关 EF Code First 的良好教程。

您走

对了方向,看起来已经连接了模型。我假设您可以在此类定义没有任何问题的情况下浏览属性。

缺少的一件事是段落和图像类的主键定义 (Id(。

编辑 1:

您只能添加一个

public DbSet<TextDocument> {get;set;}

在您的 DbContext 中,因此您将能够向下导航到图像。同样,您只能将图像的 DbSet 放在 DbContext 中,并且应该能够导航到 TextDocument。你试图实现的目标尚不清楚。编辑 2:

public class Paragraph
{
   public int Id {get; set;} // add this
   public virtual List<Images> Images {get; set;} // and add this
   public virtual TextDocument Document { get; set; } 
   public int Order { get; set; }
   public string Text { get; set; }
}