C# 从登录用户获取产品时出错。ASP.NET核心MVC
我在获取登录用户(即进行购买的用户)购买的产品时遇到问题 我有一个C# 从登录用户获取产品时出错。ASP.NET核心MVC,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我在获取登录用户(即进行购买的用户)购买的产品时遇到问题 我有一个Users表,其中包含一般注册数据,还有一个Customers表 各表之间的关系如下所示: 用户:用户名、姓名、电子邮件、密码 客户:客户id、状态、部门id、用户id 产品:产品id、名称、价格、购买日期、客户id 嗯,产品表与客户表相关,而与用户表无关。我不能改变这一点,因为数据库中还有其他应用程序 我尝试以这种方式获取产品,但是Customer的id值为空 public IActionResult View(int id
Users
表,其中包含一般注册数据,还有一个Customers
表
各表之间的关系如下所示:
:用户名、姓名、电子邮件、密码用户
:客户id、状态、部门id、用户id客户
:产品id、名称、价格、购买日期、客户id产品
产品
表与客户
表相关,而与用户
表无关。我不能改变这一点,因为数据库中还有其他应用程序
我尝试以这种方式获取产品,但是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.get返回空值
如何使客户端
id可访问以进行比较
我的GetUser
方法如下所示:
public user GetUser()
{
// Deserializar
if( _session.Exists(Key))
{
string user JSONString = _session.Consult(Key);
return JsonConvert.DeserializeObject<user>(userJSONString);
}
else
{
return null;
}
}
类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 Navigation属性(因此为null)。当您访问更高版本的User.Customer时,用户实体不再附加到DbContext,因此不会从DB加载Customer。 如果我的假设是正确的,我会提出两个选择:
context.Users.Include(c=>c.customer).GetById(x)
选择取决于Cutomer是否与您的大多数通话相关,还是仅与此通话相关。
[JsonIgnore]
尝试从用户类的customer属性中删除此选项谢谢您的反馈。我删除了它,但学生的价值仍然为零。谢谢你的评论。就这样!现在我可以得到学生的值,但现在我有一个错误:“为类型为“Project.Models.User”的“User”属性检测到自引用循环”。路径“客户”。我将寻求解决办法。非常感谢。用户引用客户,客户引用用户,所以您有一个循环。您必须明确地告诉EF,这是什么关系:一对一、一对零一等等,哪个是主要实体(即FK应该放在哪个表中)以及删除时要做什么。参见此处示例
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; }
}