首页 > 解决方案 > 使用 EF6 和 SQLite 在视图中插入

问题描述

我基于 sqlite 视图创建了一个实体,我想使用 EF6 在其中插入数据。我更改了 .edmx 文件以使 EF 将视图视为表并在视图上定义主键。问题是,当我的程序尝试将数据插入视图时(当然有一个 INSTEAD OF INSERT 触发器将数据插入到视图的 2 个基础表中),我得到了异常:

存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体以来,实体可能已被修改或删除。处理乐观并发异常。

从 EF 调用的基础查询是:

Opened connection at 12/07/2019 16:58:18 +02:00
Started transaction at 12/07/2019 16:58:18 +02:00
INSERT INTO [testcasesView]([name], [deviceversion_id], [user_id], [timestamp], [comment], [static_result], [description], [precondition], [action], [expected_result], [reviewed], [automated])
 VALUES (@p0, @p1, @p2, @p3, NULL, @p4, @p5, @p6, @p7, @p8, @p9, @p10);
SELECT [id]
FROM [testcasesView]
WHERE last_rows_affected() > 0 AND [id] = last_insert_rowid()
;
-- @p0: 'asd' (Type = String)
-- @p1: '67' (Type = Int64)
-- @p2: '20' (Type = Int64)
-- @p3: '1562943498' (Type = Int64)
-- @p4: 'as' (Type = String)
-- @p5: 'asd' (Type = String)
-- @p6: 'asd' (Type = String)
-- @p7: 'asd' (Type = String)
-- @p8: 'asd' (Type = String)
-- @p9: '0' (Type = Int64)
-- @p10: '0' (Type = Int64)
-- Executing at 12/07/2019 16:58:18 +02:00
-- Completed in 1 ms with result: SQLiteDataReader

Closed connection at 12/07/2019 16:58:18 +02:00
Disposed transaction at 12/07/2019 16:58:18 +02:00

我明白为什么,但我不知道我是否能解决这个问题。问题是,由于真正的插入发生在触发器内部(我没有发布代码,因为它是两个简单的插入),查询

SELECT [id]
FROM [testcasesView]
WHERE last_rows_affected() > 0 AND [id] = last_insert_rowid()  

不返回任何内容,然后 EF 认为没有行受到影响。

是否有可以添加到触发器中的语句或代码使 EF 看到插入发生?

标签: entity-frameworksqlite

解决方案


推荐阅读