C# LINQ到SQL插入产生奇怪的行为

C# LINQ到SQL插入产生奇怪的行为,c#,linq-to-sql,C#,Linq To Sql,我正在尝试向数据库中插入几个新创建的项。 我有一个LINQ2SQL生成的类,名为“Order” 在order中,有一个名为“OrderItems”的属性,它也是由LINQ2SQL生成的,表示该顺序的项 到目前为止还不错。 我现在遇到的问题是,当我尝试在订单中添加多个新创建的OrderItem时 即: 订单o=orderWorker.GetById(10); 对于(int i=0;i

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

在order中,有一个名为“OrderItems”的属性,它也是由LINQ2SQL生成的,表示该顺序的项

到目前为止还不错。 我现在遇到的问题是,当我尝试在订单中添加多个新创建的OrderItem时

即:

订单o=orderWorker.GetById(10); 对于(int i=0;i<5;++i){ OrderItem oi=新的OrderItem{ 顺序=o, 价格=100, 发货价格=100, ShippingMethod=。。。, Item=someItem }; o、 OrderItems.Add(oi); } context.SubmitChanges(); 不幸的是,只添加了一个实体。 是的,我通过添加Context.Log=Console.Out检查了生成的SQL,是的,只创建了一条语句

有什么线索吗? 顺便说一下,我知道我没有使用InsertOnSubmit,文档上说:

您可以通过以下方式显式请求插入: 使用InsertOnSubmit。或者, LINQ到SQL可以通过 查找连接到其中一个的对象 必须删除的已知对象 更新。例如,如果添加 未跟踪的对象到 EntitySet(TEntity)或设置 EntityRef(tenty)到未跟踪的 对象,则生成未跟踪的对象 可通过中的跟踪对象访问 图表。加工时 提交更改,LINQ到SQL遍历 跟踪对象并发现任何 可访问的持久对象是 没有跟踪。这些物体是 拟加入 数据库


非常感谢您的时间。

这听起来可能很疯狂,但我想知道如果您删除
Order=o
分配,并将其添加到
OrderLines
集合中,是否会有不同的效果。至少试一下。

问题解决了,算是吧

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

所以我禁用了Equals&GetHashcode的实现,它工作得很好。
谢谢你的推荐。=)

我尝试了你的推荐,但没有成功。它仍然只添加了一项。这种行为让我有点吃惊。我的意思是,如果出现了严重错误,就不会添加任何实体,但添加一个实体的事实让我担心。我相信这与LINQ2SQL将我创建的所有新实体视为同一个实体这一事实有关。。。怪异=\谢谢你回馈-很有趣。这没什么意义。。。为什么我不能插入两个具有相同哈希值且比较相等的新对象?
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();