【发布时间】:2019-04-16 14:33:42
【问题描述】:
我有以下型号:
public class LogData
{
public Guid ID { get; set; }
public string Name { get; set; }
}
我使用 Entity Framework Core 将这些模型保存到 SQLite 数据库中,效果很好。
我需要从数据中删除(它是动态的,我不能使用对象),所以我使用以下命令:
string command="DELETE FROM LogData WHERE ID IN ('ea53b72a-4ab2-4f88-8f1d-0f96baa7cac7')";
context.Database.ExecuteSQLCommand(command);
根据SQLitesyntax,是有效的。
不幸的是,结果我得到了 0,所以没有行受到影响。
当我删除 WHERE 条件时,它会删除表格的内容。
我猜测由于键列是Guid,并且存储为BLOB,所以普通的SQLite引擎找不到它。
所以我尝试将命令更改为:
string command="DELETE FROM LogData WHERE HEX(ID) IN ('ea53b72a-4ab2-4f88-8f1d-0f96baa7cac7')";
context.Database.ExecuteSqlCommand(command);
也试过这个:
string command="DELETE FROM AuditLog WHERE HEX(ID) = 'ea53b72a-4ab2-4f88-8f1d-0f96baa7cac7'";
context.Database.ExecuteSqlCommand(command);
这也是:
string command="DELETE FROM AuditLog WHERE ID = 'ea53b72a-4ab2-4f88-8f1d-0f96baa7cac7'";
context.Database.ExecuteSqlCommand(command);
这些都没有帮助。
我该怎么办?
【问题讨论】:
-
首先,为什么ID存储为BLOB?您可以将其切换为 UNIQUEIDENTIFIER 吗?还有数据保存后是什么样子的?你可能会遇到这里描述的这个问题neosmart.net/blog/2018/…
-
@DavidG 如果我使用它,我会得到一个例外:
SQLite Error 1: 'unrecognized token: "X'ea53b72a-4ab2-4f88-8f1d-0f96baa7cac7'" -
context.SaveChanges();? -
@DavidG 仍然无法正常工作:(
-
@Mihai 由于脚本在没有
WHERE条件的情况下工作:是的,它被持久化到数据库中。
标签: c# sqlite entity-framework-core