在C#中,SQLite随机抛出“约束失败\ r \ nColumn ...不是唯一的”

时间:2013-08-10 14:59:41

标签: c# sqlite

我在C#中使用EntityObjects,而我的后端是SQLite。系统信息:

Windows XP (up-to-date), VS2010 Premium, System.Data.SQLite 1.0.88.0 (3.7.17)

表架构是:

CREATE TABLE [transaction] (
  [primary_key_col] integer PRIMARY KEY AUTOINCREMENT, 
  [transaction_code] int NOT NULL, 
  [account_code] int NOT NULL, 
  [category_code] int NOT NULL,
  [transaction_date] date NOT NULL,
  [description] varchar(50));

public partial class Transaction : EntityObject代表此表。

要添加新的交易,请调用以下代码:

Transaction transaction = new Transaction()
{
    description = _desc,
    transaction_code = generateHash(_desc),
    account_code = _acccode,
    category_code = _catcode,
    transaction_date = DateTime.Now
};

dbEntities.Transactions.AddObject(transaction);

dbEntities.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);

工作正常,但在添加几行后,我得到以下异常:

Constraint failed\r\nColumn account_code is not unique.

如果我退出应用程序并重新启动它,此错误消失但随后会再次随机返回。

我知道account_code不是唯一的,我从未要求它是独一无二的!

应用程序只有3种特定方式可以创建事务,并且这些异常会从这些方法中随机抛出。这与SQLite有关吗? (我是SQLite的新手)。知道为什么会这样吗?我几乎拔掉了所有的头发......

1 个答案:

答案 0 :(得分:1)

根据评论,似乎已经成功了:

每次进行插入时是使用“新”dbEntities上下文,还是在多次插入时重复使用相同的上下文?无论哪种方式都无关紧要,但如果您目前正在使用后者,我会尝试前者。