在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的新手)。知道为什么会发生这种事吗?我几乎把头发都拔了。。。
根据似乎已经完成任务的注释:
您是在每次插入时都使用"新"dbEntity上下文,还是在多次插入时使用同一个上下文?这两种方式都不重要,但如果你目前正在使用后者,我会尝试前者。