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

本文关键字:失败 约束 唯一 SQLite 随机 | 更新日期: 2023-09-27 18:27:03

我在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的新手)。知道为什么会发生这种事吗?我几乎把头发都拔了。。。

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

根据似乎已经完成任务的注释:

您是在每次插入时都使用"新"dbEntity上下文,还是在多次插入时使用同一个上下文?这两种方式都不重要,但如果你目前正在使用后者,我会尝试前者。