以下是我的数据库架构,三个实体:
加载
出价
顺序
加载和出价:一对多 - 加载可以收到多个出价
订单和出价:一对一 - 单个出价将与订单一起映射
订单和加载:一对一 - 订单只能有一个出价
正如您在上面所看到的,我没有在实体中拥有ID_Load或ID_Bid属性作为EF在数据库中自动生成这些属性,因此这两个字段的属性不会添加到订单实体
我目前在项目中使用Repository模式并使用 Code First 。
现在我想通过ID_Load / ID_Bid获取订单信息(因为Bid-Order和Load-Order表之间存在一对一的关系)
我不想在应用程序中运行任何SP或Select查询,但在执行此操作时遇到问题。
如果我运行SQL,我将不得不编写以下查询:
从订单ID中选择* ID_Load = 123
或者
从订单ID中选择* ID_Bid = 123
在这种情况下,EF / Repository Patterns中的替代方法是什么。
任何人都可以帮助我。
谢谢,
答案 0 :(得分:0)
按出价ID获取订单:
long bidId; // Id of Bid
var order = dbContext.Orders.Single(o => o.Bid.ID_Bid == bidId);
按装载ID获取订单:
long loadId; // Id of Load
var order = dbContext.Orders.Single(o => o.Load.ID_Load == loadId);
如果订单的出价和加载是可选的,请使用SingleOrDefault
代替Single
。如果查询的项目不存在,Single
将抛出异常,SingleOrDefault
将返回null。
或者,如果您需要使用其ID加载出价:
var bid = dbContext.Bids.Find(bidId);
var order = bid.Order;
这可以通过强制加载来优化:
var bid = dbContext.Bids.Include(b => b.Order).SingleOrDefault(b => b.ID_Bid == bidId);
var order = bid.Order;