我只能购买已登录用户(即进行购买的用户)购买的产品时遇到了麻烦。
我有一个Users
包含常规注册数据的Customers
表和一个表。
表之间的关系如下:
User
:userId,名称,电子邮件,密码Customer
:customerId,状态,section_id,user_idProduct
:productId,名称,价格,purchase_date,customer_id那么,该Products
表与该表相关Customers
,而不与该Users
表相关。而且我无法更改,因为数据库中还有其他应用程序在查询。
我尝试以这种方式获取产品,但是id的值为Customer
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;
}
}
重要的是要说“用户”和“客户”之间的关系是一对一的。注册“用户”时,在表中用“ k”表示“用户”来注册“客户”
类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表示形式,该表示形式是在数据库中查询的。发生这种情况时,将查询没有Customer导航属性的用户(因此它为null)。当您以后访问User.Customer时,User实体不再附加到DbContext,因此不会从DB加载Customer。如果我的假设是正确的,我将提出两个选择:
context.Users.Include(c => c.Customer).GetById(x)
选择取决于Cutomer与大多数电话相关还是仅与单个电话相关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句