我正在使用ASP。NET MVC与实体框架。我有一个类,处理SQL称为DataLayer
。DataLayer
中有一个User
对象。
我构建了一个函数,它包含购物车中的所有商品,并通过id返回用户,然后将数据层中的用户设置为找到的用户(这样它就可以登录)。
功能代码为:
public User userWithInclude(int? userId)
{
List<User> users = Users.Include(x => x.Cart)
.Include(x => x.Cart.shakes)
.Include(x => x.Cart.equipmentList)
.Include(x => x.orders)
.Include(m => m.menus).ToList();
User user = users.ToList().Find(x => x.ID == userId);
return user;
}
下面是登录函数的一个片段:
public IActionResult LogInUser(User vm)
{
User user = DataLayer.Data.Users.ToList()
.Find(x => x.userName == vm.userName && x.password == vm.password);
if (user != null)
{
User user2 = DataLayer.Data.userWithInclude(user.ID);
DataLayer.User = user2;
if (user2.Cart == null)
{
user2.Cart = new Cart();
}
DataLayer.Data.SaveChanges();
return RedirectToAction("Index");
}
}
当我在登录的最后一行之前进行调试时,当我将鼠标悬停在用户对象上时,购物车的项目存在所有变量,但其中的对象为空。
在SQL Server数据库中,数据包含所有详细信息。
怎么可能呢?
2条答案
按热度按时间voj3qocg1#
您可以像这样重写get user类。
然后,您的登录操作结果可能如下所示
创建单独的登录方法
如果这不起作用,您可以尝试在用户之后获取购物车,如果为null,则进行调试,但我对您的外键和关系等了解不够,无法帮助您完成此操作
ruarlubt2#
我认为你必须使用**
ThenInclude()
**方法。例如: