数据库对象在调试过程中发生更改

时间:2019-01-17 16:02:55

标签: c# database debugging asp.net-core

我正在编写一个名为“社交网络”的项目。它是ASP.NET Core Web应用程序+模板Web应用程序(模型-视图-控制器)。我写了添加好友的功能,但是不起作用。

添加朋友后,我想显示一个包含他的数据的页面,但看来他没有朋友。

但是,如果您执行以下操作,则将显示朋友(用户没有朋友。我进入了数据库。出现了朋友。如何?):

Screenshots

用户模型:

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;
            }
        }
    }
}

我不知道这怎么可能。

1 个答案:

答案 0 :(得分:1)

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

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

在通过Include("Friends")方法加载用户时,尝试使用UserProfile()

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