【发布时间】:2019-05-17 11:16:34
【问题描述】:
EF Codefirst GET 方法子模型未推出。 使用 Database First 我想要以下 Json 结果。但是,我无法使用 Code First 获得以下 Json。我需要一个结构来处理模型关系而不运行 include 方法。
模型.cs
public class BloggingContext : DbContext
{
public BloggingContext(DbContextOptions<BloggingContext> options) : base(options){ }
public virtual DbSet<Blog> Blogs { get; set; }
public virtual DbSet<Post> Posts { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public ICollection<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; }
}
ValuesController.cs
private readonly BloggingContext db;
public ValuesController(BloggingContext db)
{
this.db = db;
}
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<Blog>> Get()
{
return db.Blogs.ToList();
}
Startup.cs
var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNetCore.NewDb;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<Models.Model.BloggingContext>
(options => options.UseSqlServer(connection));
数据库表
Blogs Table Result
__________________
BlogId | Url
1 | asdasd1
2 | asdas2
Posts Table Result
__________
PostId | Title | Content | BlogId
1 | asdasd | fdg | 1
2 | fsg | asda | 1
3 | dsgfsdg | sgf | 2
运行结果
[
{
"blogId": 1,
"url": "asdasd1",
"posts": null
},
{
"blogId": 2,
"url": "asdas2",
"posts": null
},
{
"blogId": 3,
"url": "asdsad3",
"posts": null
}
]
我想使用上面的代码
[
{
"blogId": 1,
"url": "asdasd1",
"posts": [
{
"PostId": 1,
"Title": "asdasd",
"Content": "fdg"
},
{
"PostId": 2,
"Title": "fsg",
"Content": "asda"
}
]
},
{
"blogId": 2,
"url": "asdas2",
"posts": {
"PostId": 2,
"Title": "fsg",
"Content": "asda"
}
},
{
"blogId": 3,
"url": "asdsad3",
"posts": null
}
]
【问题讨论】:
-
return db.Blogs.Include(x => x.Posts).ToList();以加载内部集合 -
@VidmantasBlazevicius 他在他的帖子中说“没有运行包含”,但不知道为什么不运行:p
-
您好,上面的例子是一个简单的构建,原来构建的子表太多了。因此,我希望子模型在我首先调用数据库中的上层模型时自动出现。
-
@Hakan 延迟加载? learnentityframeworkcore.com/lazy-loading
-
为了所有美好的圣物的爱,不要偷懒。对于每个单独的关系,您最终会得到 N+1 个查询。
标签: c# asp.net-core ef-code-first asp.net-core-webapi ef-database-first