public class User {
public int UserId { get; set; }
public ICollection<Order> Orders { get; set; }
public ICollection<Order> Sales { get; set; }
}
public class Listing {
public int ListingId { get; set; }
public int UserId { get; set; }
public User User { get; set; }
}
public class Order {
public int ListingId { get; set; }
public Listing Listing { get; set; }
public int BuyerId { get; set; }
public User Buyer { get; set; }
}
modelBuilder.Entity<Order>()
.HasOne(e => e.Buyer)
.WithMany(e => e.Orders)
.HasForeignKey(e => e.BuyerId);
modelBuilder.Entity<Order>()
.HasOne(e => e.Listing.User)
.WithMany(e => e.Sales)
.HasForeignKey(e => e.Listing.UserId);
我在配置
User.Sales
属性的关系时遇到问题。
上面的代码应该解释我想要做什么,但是
e.Listing.User
和 e.Listing.UserId
部分不起作用。
我知道我可以通过向
SellerId
类引入 Seller
和 Order
属性来解决问题,但这感觉像是浪费,因为这些可以通过 Listing
属性访问,特别是通过 Order.Listing.UserId
和 Order.Listing.User
分别。
有没有办法配置关系而不需要它?
从该模型来看,Sales 属于 Listing,而不是 User。用户有许多订单,通过买家链接回来。当谈到已售商品时,这是通过列表进行的。如果您想要一个用户的所有销售额,那么您可以使用:
var salesForUser = context.Orders
.Where(o => o.Listing.User.UserId == userId)
.ToList();
...例如。当加载用户并希望立即访问他们的销售时,
.Include(o => o.Listings).ThenInclude(l => l.Sales)
。