1

假设我有这些模型:

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 }
}

现在,我需要在TextDocumentsParagraphsImagesParagraphsin TextDocumentsImagesin ParagraphsImagesinTextDocuments等中导航。

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

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

2 回答 2

0

你的方向是正确的,看起来你已经连接了模型。我假设您可以在属性中导航,而不会对此类定义产生任何问题。

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

编辑1:

您只能添加一个

public DbSet<TextDocument> {get;set;}

在您的 DbContext 中,因此您将能够向下导航到图像。同样,您只能将 DbSet for Image 放在 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; }

}
于 2013-02-14T15:33:17.050 回答
0

问题不清楚。你的模型也有点奇怪。TextDocument不包括Images 的列表。但Image两者都包括返回导航到ParagraphTextDocument。我认为您需要将Image列表添加到并从中Paragraph删除。这样你就可以让s 拥有s 和s 拥有s;TextDocumentImageDocumentPharagraphPharagraphImage

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 的良好教程。

于 2013-02-14T15:35:11.863 回答