gpt4 book ai didi

c# - Entity Framework Core ExecuteSqlCommand 使用 SQLite 删除不起作用

转载 作者:行者123 更新时间:2023-11-30 22:55:02 28 4
gpt4 key购买 nike

我有以下模型:

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);

根据 SQLite syntax , 是有效的。

不幸的是,结果我返回了 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);

这些都没有帮助。

我该怎么办?

最佳答案

GUID 作为二进制 BLOB 存储在数据库中,这意味着您需要传入二进制值以进行比较。为此,您可以使用 X'...' 表示法。此外,您需要转换 endianness GUID 到小端。幸运的是,有一个方便的扩展方法 here进行转换:

public static Guid FlipEndian(this Guid guid)
{
var newBytes = new byte[16];
var oldBytes = guid.ToByteArray();

for (var i = 8; i < 16; i++)
newBytes[i] = oldBytes[i];

newBytes[3] = oldBytes[0];
newBytes[2] = oldBytes[1];
newBytes[1] = oldBytes[2];
newBytes[0] = oldBytes[3];
newBytes[5] = oldBytes[4];
newBytes[4] = oldBytes[5];
newBytes[6] = oldBytes[7];
newBytes[7] = oldBytes[6];

return new Guid(newBytes);
}

然后你像这样使用它:

//The source GUID
var source = Guid.Parse("ea53b72a-4ab2-4f88-8f1d-0f96baa7cac7");
//Flip the endianness
var flippedGuid = source.FlipEndian();

//Create the SQL
var command = $"DELETE FROM AuditLog WHERE ID = X'{flippedGuid.ToString().Replace("-", "")}'";

context.Database.ExecuteSqlCommand(command);

关于c# - Entity Framework Core ExecuteSqlCommand 使用 SQLite 删除不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55693483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com