我正在编写一个名为“社交网络”的项目。它是ASP.NET Core Web应用程序+模板Web应用程序(模型-视图-控制器)。我写了添加好友的功能,但是不起作用。
添加朋友后,我想显示一个包含他的数据的页面,但看来他没有朋友。
但是,如果您执行以下操作,则将显示朋友(用户没有朋友。我进入了数据库。出现了朋友。如何?):
用户模型:
public class UserModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string Sex { get; set; }
public List<UserModel> Friends { get; set; }
}
HomeController:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SocialNetwork.Models;
namespace SocialNetwork.Controllers
{
[Authorize]
public class HomeController : Controller
{
SocialNetworkContext db;
public HomeController(SocialNetworkContext context)
{
db = context;
}
public IActionResult Index()
{
var user = db.Users.First(u => u.Name == HttpContext.User.Identity.Name);
return Redirect($"~/Home/UserProfile/{user.Id}");
}
public IActionResult UserProfile(int Id)
{
ViewBag.is_auth_user = IsAuthorizedUser(Id);
var user = db.Users.First(u => u.Id == Id);
return View(user);
}
public IActionResult AddFriend(int Id)
{
var user = db.Users.First(u => u.Name == HttpContext.User.Identity.Name);
var new_friend = db.Users.First(u => u.Id == Id);
if (user.Friends == null)
{
user.Friends = new List<UserModel>();
}
user.Friends.Add(new_friend);
db.Users.Update(user);
db.SaveChanges();
return Redirect($"~/Home/UserProfile/{new_friend.Id}");
}
public IActionResult Users()
{
return View(db.Users.ToList());
}
[HttpGet]
public IActionResult Edit(int Id)
{
var user = db.Users.FirstOrDefault(u => u.Id == Id);
return View(user);
}
[HttpPost]
public IActionResult Edit(UserModel user)
{
db.Users.Update(user);
db.SaveChanges();
return Redirect($"~/Home/UserProfile/{user.Id}");
}
protected bool IsAuthorizedUser(int Id)
{
var user = db.Users.First(u => u.Name == HttpContext.User.Identity.Name);
if (user.Id == Id)
{
return true;
}
else
{
return false;
}
}
}
}
我不知道这怎么可能。
答案 0 :(得分:1)
这看起来像是EF中的延迟加载问题。
基本上,在您访问实体之前不会加载它们。
在通过Include("Friends")
方法加载用户时,尝试使用UserProfile()
。
这将确保始终加载相关实体。