假设我有这些模型:
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 }
}
现在,我需要导航TextDocuments
中的Paragraphs
,Images
,Paragraphs
,TextDocuments
,Images
Paragraphs
} {},Images
,TextDocuments
等等。
如何“连接”模型? 我问的是:
答案 0 :(得分:0)
您的方向正确,看起来您已连接模型。我假设您可以在没有任何问题的情况下浏览属性。
缺少的一件事是Paragraph和Image类的主键定义(Id)。
编辑1:
您只能添加
public DbSet<TextDocument> {get;set;}
在您的DbContext中,因此您将能够向下导航到图像。同样,您只能在DbContext中放置DbSet for Image,并且您应该能够导航到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; }
}
答案 1 :(得分:0)
问题不明确。
你的模型也有点奇怪。 TextDocument
未包含Image
列表。但Image
包括向Paragraph
和TextDocument
的后退导航。我认为您需要将Image
列表添加到Paragraph
并从TextDocument
中删除Image
。这样,您就可以Document
让Pharagraph
和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();
}
请参阅this blog帖子,其中包含有关EF Code First的良好教程。