实体框架 - 在多个数据库集中导航
本文关键字:数据库 集中 导航 框架 实体 | 更新日期: 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 }
}
现在,我需要在TextDocuments
、Paragraphs
、Images
、Paragraphs
TextDocuments
、Images
Paragraphs
、Images
TextDocuments
等中导航。
如何"连接"模型?我要问的是:
- 如何制作数据上下文?仅适用于文本文档?
- 有了这个,我如何获得,例如,在不知道 ID 等的情况下获得所有图像?
这个问题不清楚。另外,您的模型有点奇怪。 TextDocument
不包括Image
的列表。但Image
两者都包括 Paragraph
和 TextDocument
的后退导航 .我认为您需要将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; }
}