0

我正在尝试使用 InsertAllOnSubmit 进行多次插入,但只有 1 个项目被插入到表中。我认为发生这种情况的唯一原因是与主键字段的生成有关,我目前允许代码自动生成该字段,但似乎并没有这样做。有人可以帮忙吗?

List<rewardsClaimed> lstRewardsClaimed = new List<rewardsClaimed>();

for (int i = 0; i < ticket.delivery.quantity; i++)
{
    rewardsClaimed claim = result;
    lstRewardsClaimed.Add(claim);
}
dc.rewardsClaimeds.InsertAllOnSubmit(lstRewardsClaimed);
dc.SubmitChanges();

编辑 :

我发现问题出在哪里...... ID 字段默认设置为 0,因此当插入完成时,由于所有行都具有相同的 ID,因此它们被视为 1 行。我将如何防止这种情况?

4

4 回答 4

2

问题是 List 和 Table 的行为完全不同。

AList<T>允许您在不检查引用的情况下多次添加同一个实例,换句话说,在您的列表中,您对同一个对象有多个引用。

Table<T>另一方面,当你打电话时InsertAllOnsubmit方法时,会检查集合中的每个项目以查看其是否已经“标记”要插入到表中。如果对象已经“标记”,则跳过它。

您的代码发生的情况是您正在传递对同一对象进行 n 次引用的声明列表。当传递给Table<T>第一次出现时被标记为插入。由于列表中的其他项目是同一个对象,它们已经被标记为插入。

希望这可以澄清。

于 2012-04-19T14:11:12.840 回答
1

每个人都要求创建 RewardsClaimed 类的新实例。但我认为这不是正确的原因。因此,我尝试了以下示例代码,发现列表中添加了 5 个不同的实例。

第 1 部分:显示可以在不创建新实例的情况下将同一项目添加到本地列表(这不是答案)

代码: 在此处输入图像描述

结果:

在此处输入图像描述

第 2 部分:创建新的主键将是解决方案。(这是问题和解决方案。)

我建议,请检查您的 PrimaryID 列中的数据是否重复。我的意思是,如果您的主键不是自动生成的,而是您手动生成的,那么它很可能会获得 n 次具有相同主键的行。如果它被重复,那么它只会插入它的单个实例。

编辑:如何自动生成字段值

如果您想自动生成主键,请参阅此

于 2012-04-19T07:28:17.663 回答
0
List<rewardsClaimed> lstRewardsClaimed = new List<rewardsClaimed>();

for (int i = 0; i < ticket.delivery.quantity; i++)
{
    rewardsClaimed claim = new rewardsClaimed();
    claim.property = result.property; // do this foreach property except id field
    lstRewardsClaimed.Add(claim);
}

dc.rewardsClaimeds.InsertAllOnSubmit(lstRewardsClaimed);

dc.SubmitChanges();
于 2012-04-19T07:09:13.943 回答
0

您没有创建新的声明实例。

rewardsClaimed claim = new rewardsClaimed();
于 2012-04-19T07:06:15.690 回答