从登录用户处获取产品错误.ASP.. NET Core MVC



我在获取登录用户(即进行购买的用户)购买的产品时遇到问题。

我有一个包含一般注册数据的Users表和一个Customers表。

表之间的关系如下:

  • User: userId, name, email, password
  • Customer: customerId, status, section_id, user_id
  • Product: productId, name, price, purchase_date, customer_id

好吧,Products表与Customers表相关,而与Users表无关。我不能更改,因为数据库中还有其他应用程序要查询。

我尝试以这种方式获得产品,但Customer的id值为空。

public IActionResult View(int id)
{
User user = _loginUser.GetUser();
Product product = _pedidoRepository.GetProduct(id);
if (product.customer_id != user.Customer.customerId)
{
return new ContentResult() { Content = "Access denied" };
}
return View(product);
}

我得到错误:

Project.Models.users.Customer。获取返回null

如何使Clientid可访问以进行比较?

我的GetUser方法是这样的:

public user GetUser()
{
// Deserializar
if( _session.Exists(Key)) 
{
string user JSONString = _session.Consult(Key);
return JsonConvert.DeserializeObject<user>(userJSONString);
}
else
{
return null;
}
}

重要的是要说明"User"one_answers";Customer"是一个接一个。注册"用户"、"客户"时在表中注册了一个fk为"User">

类User.cs

public class User
{
/* PK */
[Key]
public int userId { get; set; }
public string name { get; set; }
public string email{ get; set; }
public string passwor{ get; set; }
[ForeignKey("user_id")]
[JsonIgnore]
public Customer Customer { get; set; }
}

类Customer.cs

public class Customer
{
/* PK */
[Key]
public int customerId{ get; set; }
public string Status { get; set; }

[Column("user_id")]
[ForeignKey("User")]
public int? user_id { get; set; }
public virtual User User { get; set; }
.
.
}

类Product.cs

public class Product
{
/* PK */
[Key]
public int productId{ get; set; }
public string name { get; set; }
public decimal price { get; set; }
public DateTime  purchase_date { get; set; }
[Column("customer_id")]
[ForeignKey("Customer")]
public int? customer_id{ get; set; }
public virtual Customer Customer { get; set; }
}

我感谢任何意见。我从语言开始。如果我需要,我可以发送更多的代码。

我假设你的会话持有用户的JSON表示,在某个时候从DB查询。当这种情况发生时,查询的user不带Customer导航属性(因此为空)。当您访问以后的用户时。Customer、User实体不再附加到DbContext中,因此不会从DB中加载Customer。如果我的假设是正确的,我将提出两个选项:

  1. 当填充会话对象时,用加载的客户查询user,如context.Users.Include(c => c.Customer).GetById(x)
  2. 在您的方法中,使用userId从DB查询Customer。例如,您从会话中获取User,但从DB中匹配Customer。

选择取决于客户是否与您的大多数呼叫相关或仅与此单个呼叫相关。

最新更新