我有几张与标准Order,OrderLine表具有相似关系结构的表。
在创建数据上下文时,它为Order类提供了一个OrderLines属性,该属性应使用该特定Order对象的OrderLine对象填充。
当然,默认情况下它会延迟加载OrderLine属性中的东西,但这应该是相当透明的吗?
好的,这是我遇到的问题:当我走MyOrder.OrderLines
时,我得到一个空列表但是当我走myDataContext.OrderLines.Where(line => line.OrderId == 1)
时,我得到了正确的列表。
public void B()
{
var dbContext = new Adis.CA.Repository.Database.CaDataContext(
"<connectionString>");
dbContext.Connection.Open();
dbContext.Transaction = dbContext.Connection.BeginTransaction();
try
{
//!!!Edit: Imortant to note that the order with orderID=1 already exists
//!!!in the database
//just add some new order lines to make sure there are some
var NewOrderLines = new List<OrderLines>()
{
new OrderLine() { OrderID=1, LineID=300 },
new OrderLine() { OrderID=1, LineID=301 },
new OrderLine() { OrderID=1, LineID=302 },
new OrderLine() { OrderID=1, LineID=303 }
};
dbContext.OrderLines.InsertAllOnSubmit(NewOrderLines);
dbContext.SubmitChanges();
//this will give me the 4 rows I just inserted
var orderLinesDirect = dbContext.OrderLines
.Where(orderLine => orderLine.OrderID == 1);
var order = dbContext.Orders.Where(order => order.OrderID == 1);
//this will be an empty list
var orderLinesThroughOrder = order.OrderLines;
}
catch (System.Data.SqlClient.SqlException e)
{
dbContext.Transaction.Rollback();
throw;
}
finally
{
dbContext.Transaction.Rollback();
dbContext.Dispose();
dbContext = null;
}
}
据我所见,我没有做任何特别奇怪的事情,但我认为orderLinesDirect
和orderLinesThroughOrder
会给我相同的结果集。
谁能告诉我为什么不呢?
答案 0 :(得分:1)
您只是添加OrderLines;没有任何实际的订单。所以dbContext.Orders上的Where返回一个空列表。
如何按顺序找到订单属性OrderLines我不明白,所以我可能会在这里搞砸。
<强> [编辑] 强>
您能否更新示例以显示实际类型,尤其是订单变量? Imo,它应该是IQueryable<Order>
,但奇怪的是你可以.OrderLines
。尝试在Where。
First()
或FirstOrDefault()