Mac*_*kan 5 c# entity-framework
我第一次开始使用 .NET Core 2 和数据库,并查看了以下示例:Getting Started with EF Core on .NET Core Console App with a New database。我有几个模型,比如
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是如果我加载一个对象,就像Post post = context.Post.SingleOrDefault(s => s.PostId == id)那么post.Blog为空。但是如果我在从数据库中读取之前,context.Blogs在调试器中展开,那么post.Blog使用上述命令从数据库中读取后是一个有效的对象。
所以感觉我需要从数据库中读取博客来加载它们,这样来自 Post 的引用才会正确。这样做的正确方法是什么?
第二个问题:如何从任何地方获取数据库上下文?我应该在构造函数中设置一个带有连接字符串的默认构造函数并一直创建一个新的上下文吗?
看看这里的详细解释:https : //docs.microsoft.com/en-us/ef/core/querying/related-data
上面链接中的一些示例:
急切加载
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
显式加载
using (var context = new BloggingContext())
{
var blog = context.Blogs
.Single(b => b.BlogId == 1);
context.Entry(blog)
.Collection(b => b.Posts)
.Load();
}
Run Code Online (Sandbox Code Playgroud)
尚不支持延迟加载。它应该会出现在 v2.1 中。
| 归档时间: |
|
| 查看次数: |
5316 次 |
| 最近记录: |