![](/img/trans.png)
[英]I can't access the UserName of the logged in user. (ASP.NET Core Web API)
[英]Error getting products from the logged in user. ASP.NET Core MVC
我无法仅获取登录用户(即进行购买的用户)购买的产品。
我有一个包含一般注册数据的Users
表和一个Customers
表。
表之间的关系如下:
User
:userId、姓名、email、密码Customer
:customerId、status、section_id、user_idProduct
:productId、name、price、purchase_date、customer_id 那么, Products
表与Customers
表相关,而不是与Users
表相关。 而且我无法更改它,因为数据库中还咨询了其他应用程序。
我尝试通过这种方式获取产品,但Customer
的 id 值为 null。
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.get 返回 null
如何使Client
ID 可访问以进行比较?
我的GetUser
方法如下所示:
public user GetUser()
{
// Deserializar
if( _session.Exists(Key))
{
string user JSONString = _session.Consult(Key);
return JsonConvert.DeserializeObject<user>(userJSONString);
}
else
{
return null;
}
}
重要的是,“用户”和“客户”之间的关系是一一对应的。 注册“用户”时,“客户”在表中注册,“用户”的 fk
Class 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; }
}
Class 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; }
.
.
}
Class 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; }
}
我感谢任何评论。 我从语言开始。 如果需要,我可以发送更多代码。
好吧,我假设您的 session 拥有用户的 JSON 表示,在某个时候从数据库中查询。 发生这种情况时,将在没有 Customer 导航属性的情况下查询用户(因此它为空)。 当您稍后访问 User.Customer 时,用户实体不再附加到 DbContext,因此不会从数据库加载客户。 如果我的假设是真的,我会提出两个选择:
context.Users.Include(c => c.Customer).GetById(x)
选择取决于 Cutomer 是与您的大多数呼叫相关还是仅与单个呼叫相关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.