我正在尝试将几个新创建的项插入数据库。 我有一个名为“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遍历 被跟踪的物体并发现任何物体 可达的持久对象 没跟踪。这样的对象是 插入的候选人 数据库中。
非常感谢你的时间。
答案 0 :(得分:2)
问题解决了,等等。
问题是我天真地实现了GetHashcode方法。 意思是,它为已经创建的实体返回了正确的哈希码,但是对于新创建的实体(没有分配的ID),它返回了相同的哈希码。
所以我禁用了我的Equals&amp; amp; GetHashcode,它工作得很好。 谢谢你试试=)
答案 1 :(得分:0)
这可能听起来很疯狂,但我想知道如果删除Order = o
作业,它只会将其添加到OrderLines
集合中,它是否会有所不同。试试吧,至少。