C# 数据库对象在调试期间更改

C# 数据库对象在调试期间更改,c#,database,debugging,asp.net-core,C#,Database,Debugging,Asp.net Core,我正在写一个叫做社交网络的项目。它是ASP.NET核心Web应用程序+模板Web应用程序(模型视图控制器)。我写了添加朋友的功能,但它不起作用 添加朋友后,我想显示一个包含他的数据的页面,但他似乎没有朋友 但如果您执行以下操作,则会显示朋友(用户没有朋友。我已输入数据库。朋友已出现。如何显示?) 用户模型: public class UserModel { public int Id { get; set; } public string Name { get; set; }

我正在写一个叫做社交网络的项目。它是ASP.NET核心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; }
}
公共类用户模型
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串密码{get;set;}
公共字符串Sex{get;set;}
公共列表朋友{get;set;}
}
家庭控制器:

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;
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统诊断;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.EntityFrameworkCore;
使用Microsoft.AspNetCore.Authorization;
使用Microsoft.AspNetCore.Mvc;
使用社会网络模型;
命名空间SocialNetwork.Controllers
{
[授权]
公共类HomeController:控制器
{
社会网络环境数据库;
公共家庭控制器(SocialNetworkContext)
{
db=上下文;
}
公共IActionResult索引()
{
var user=db.Users.First(u=>u.Name==HttpContext.user.Identity.Name);
返回重定向($“~/Home/UserProfile/{user.Id}”);
}
公共IActionResult用户配置文件(int Id)
{
ViewBag.is_auth_user=IsAuthorizedUser(Id);
var user=db.Users.First(u=>u.Id==Id);
返回视图(用户);
}
公共IActionResult AddFriend(内部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=新列表();
}
user.Friends.Add(新朋友);
db.Users.Update(用户);
db.SaveChanges();
返回重定向($“~/Home/UserProfile/{new_friend.Id}”);
}
公共IActionResult用户()
{
返回视图(db.Users.ToList());
}
[HttpGet]
公共IActionResult编辑(内部Id)
{
var user=db.Users.FirstOrDefault(u=>u.Id==Id);
返回视图(用户);
}
[HttpPost]
公共IActionResult编辑(用户模型用户)
{
db.Users.Update(用户);
db.SaveChanges();
返回重定向($“~/Home/UserProfile/{user.Id}”);
}
受保护的布尔IsAuthorizedUser(内部Id)
{
var user=db.Users.First(u=>u.Name==HttpContext.user.Identity.Name);
if(user.Id==Id)
{
返回true;
}
其他的
{
返回false;
}
}
}
}

我不知道这是怎么可能的。

这看起来像是EF中的延迟加载问题

基本上,在您访问实体之前不会加载它们

UserProfile()方法中加载用户时,请尝试使用
Include(“Friends”)


这将确保始终加载相关实体。

您能告诉我们错误的样子吗?这看起来像EF中的延迟加载问题。基本上,在您访问实体之前不会加载它们。在
UserProfile()方法中加载用户时,请尝试使用
Include(“Friends”)
。这将确保始终加载相关实体。我搞错了吗<代码>返回重定向($“~/Home/UserProfile/{new_friend.Id}”)因此,您正在重定向到刚刚添加的朋友的(新)用户配置文件。。。这个朋友有朋友吗?或者是您的问题,在导航到
“~/Home/UserProfile/{user.Id}”
之后,您刚刚添加的朋友没有出现?@nilsK没有。所以它是有意的。对添加后我看不到朋友。@BarryO'Kane Yes!)非常感谢你。我花了很多时间去理解什么是错的。你可以把答案写下来,这样我就可以把它标记为正确的。