gpt4 book ai didi

c# - 使用 Eager & Explicit 加载查询相关实体它在 EF for ASP.NET MVC CORE 中不起作用

转载 作者:行者123 更新时间:2023-11-30 20:32:31 24 4
gpt4 key购买 nike

我在 VS 2015 .net MVC 应用程序 中尝试过这个,它完美地工作,没有任何问题。

相反,尝试使用 DOTNET CORE 1.x 进行相同的测试,我无法获得 2^ 级导航属性。你遇到过这样的情况,或者你知道如何解决?

数据库类

 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 Person Person { get; set; }

public Blog Blog { get; set; }
}

public class Person
{
public int PersonId { get; set; }
public string Username { get; set; } // I need to show this in the partial view
public string Action { get; set; }
}

Controller

     public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}


Blog blog = await _context.Blogs
.Include(b=>b.Posts)
.Include(b=>b.Posts.Select(x=>x.Person))
.FirstOrDefaultAsync(b => b.BlogId == id);

//Then.Include don't show property!


if (blog == null)
{
return NotFound();
}

return View(blog);
}

查看

@model MyProj.Models.Blog

@{
ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
<h4>Blog</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Url)
</dt>

<dd>
@Html.DisplayFor(model => model.Url)
</dd>

</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.BlogId }) |
@Html.ActionLink("Back to List", "Index")
</p>
<br />
<div>
@Html.Partial("_posts", this.Model.Posts)
</div>

局部 View

@model IEnumerable<MyProj.Models.Post>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Content)
</th>
<th>
Person
</th>
<th></th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Content)
</td>
<td>
@Html.DisplayFor(modelItem => item.Person.Username)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.PostId }) |
@Html.ActionLink("Details", "Details", new { id=item.PostId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.PostId })
</td>
</tr>
}

</table>

在我的例子中,我无法在显示帖子列表的部分中获取属性 Person.Username。 ThenIclude(带智能感知)不显示表格

错误代码:InvalidOperationException:属性表达式 'b => {from Post x in [b].Posts select [x].Person}' 无效。该表达式应表示属性访问:'t => t.MyProperty'。有关包括相关数据的更多信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=746393 .

预先感谢您进行故障排除,我无法弄清楚。

最佳答案

我花了大约 20 个小时试图解决这个问题,以了解为什么它不起作用......最后它是哥伦布的蛋。感谢 Ivan Stoev 的评论。

虽然 intellisense 不显示相关实体,但在构建应用程序时它可以工作。

 Blog blog = await _context.Blogs
.Include(b=>b.Posts)
.ThenInclude(p=>p.Person)
.FirstOrDefaultAsync(b => b.BlogId == id);

关于c# - 使用 Eager & Explicit 加载查询相关实体它在 EF for ASP.NET MVC CORE 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41319460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com