C# .NET Core在另一个模型中使用AppUser作为属性
所以我想做的是把一个作者和一篇文章联系起来。AppUser类从IdentityUser扩展而来。我试图将每篇文章的作者设置为AppUser,但我遇到了一些问题。在数据库中,Author没有出现,而是authord,这是为什么?尽管看起来我可以通过帖子联系到AppUser,但我没有收到任何错误或警告。但我仍然无法通过帖子查看作者姓名,有人能解释一下原因吗 后期模型C# .NET Core在另一个模型中使用AppUser作为属性,c#,authentication,asp.net-core,.net-core,asp.net-core-mvc,C#,Authentication,Asp.net Core,.net Core,Asp.net Core Mvc,所以我想做的是把一个作者和一篇文章联系起来。AppUser类从IdentityUser扩展而来。我试图将每篇文章的作者设置为AppUser,但我遇到了一些问题。在数据库中,Author没有出现,而是authord,这是为什么?尽管看起来我可以通过帖子联系到AppUser,但我没有收到任何错误或警告。但我仍然无法通过帖子查看作者姓名,有人能解释一下原因吗 后期模型 public class Post { ..... ..... public AppUser Author
public class Post
{
.....
.....
public AppUser Author { get; set; }
}
AppUser
public class AppUser : IdentityUser
{
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Post post)
{
if (ModelState.IsValid)
{
AppUser appUser = await userManager.GetUserAsync(HttpContext.User);
post.Author = appUser;
string slug = userProject.Name.ToLower().Replace(" ", "-");
post.Slug = slug;
context.Add(post);
await context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(post);
}
控制器
public class AppUser : IdentityUser
{
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Post post)
{
if (ModelState.IsValid)
{
AppUser appUser = await userManager.GetUserAsync(HttpContext.User);
post.Author = appUser;
string slug = userProject.Name.ToLower().Replace(" ", "-");
post.Slug = slug;
context.Add(post);
await context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(post);
}
您应该将
AuthorId
添加到Post
模型中
public class Post
{
public string AuthorId { get; set; }
[ForeignKey("AuthorId")]
public AppUser Author { get; set; }
}
只需将AuthorId
设置为appUser.Id
post.AuthorId = appUser.Id;
这有助于我从视图中显示AuthorId,但我仍然无法在视图中显示用户模型中的数据。您不应显示
AuthorId
。当您使用AuthorId
时,实体框架会自动通过AuthorId
设置Author
。这只是将值设置为Author
属性的一种方法。此外,您还可以像这样使用Include
:var posts=context.posts.Include(x=>x.Author)代码>谢谢,一旦我添加了inclde,它就可以工作了。我不太清楚为什么框架会自动将Id与用户匹配?