LINQ to SQL - 插入让人产生奇怪的行为

时间:2010-03-28 21:06:28

标签: c# linq-to-sql

我正在尝试将几个新创建的项插入数据库。 我有一个名为“Order”的LINQ2SQL生成类。

在内部订单中,有一个名为“OrderItems”的属性,它也是由LINQ2SQL生成的,代表该订单的项目。

到目前为止一切顺利。 我现在遇到的问题是,当我尝试在Order中添加多个新创建的OrderItem时。

即:

Order o = orderWorker.GetById( 10 ); 
for( int i=0; i < 5; ++i ) {
  OrderItem oi =new OrderItem {
                Order = o,
                Price = 100,
                ShippingPrice = 100,
                ShippingMethod = ...,
                Item = someItem
            };
  o.OrderItems.Add( oi );
}

context.SubmitChanges();

不幸的是,只添加了一个实体。 是的,我通过添加Context.Log = Console.Out来检查生成的SQL,是的,只创建了一个语句。

任何线索? 顺便说一下,我知道我没有使用InsertOnSubmit,文档说:

  

您可以明确请求插入   使用InsertOnSubmit。或者,   LINQ to SQL可以推断插入   找到连接到其中一个的对象   已知的对象必须是   更新。例如,如果添加一个   未跟踪的对象到   EntitySet(TEntity)或设置   EntityRef(TEntity)到Untracked   对象,你制作Untracked对象   可通过跟踪对象访问   图表。在处理时   SubmitChanges,LINQ to SQL遍历   被跟踪的物体并发现任何物体   可达的持久对象   没跟踪。这样的对象是   插入的候选人   数据库中。

非常感谢你的时间。

2 个答案:

答案 0 :(得分:2)

问题解决了,等等。

问题是我天真地实现了GetHashcode方法。 意思是,它为已经创建的实体返回了正确的哈希码,但是对于新创建的实体(没有分配的ID),它返回了相同的哈希码。

所以我禁用了我的Equals&amp; amp; GetHashcode,它工作得很好。 谢谢你试试=)

答案 1 :(得分:0)

这可能听起来很疯狂,但我想知道如果删除Order = o作业,它只会将其添加到OrderLines集合中,它是否会有所不同。试试吧,至少。