gpt4 book ai didi

c# - 使用 Entity Framework 4、MySQL 和代码优先存储字节数组?

转载 作者:可可西里 更新时间:2023-11-01 06:33:19 25 4
gpt4 key购买 nike

嘿,我正在尝试使用 EF 4 MySQL(最新连接器)和代码优先方法存储一个简单的 byte[]

简单地做:

public byte[] Thumbnail {get; set;}

创建时出现以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

然后它指向我的 byte[] 声明之后的内容。

有人给我任何快速提示吗?

最佳答案

您需要使用 MaxLength 属性。

[MaxLength(16)]
public byte[] test { get; set; }

请注意,上面将其转换为 tinyblob 数据类型,wich can have indexing/primary key problems .使用迁移时,它变成这样:

AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "tinyblob"));

如果需要索引/主键,可以使用属性column并将TypeName设置为"Binary"

[MaxLength(16), Column(TypeName = "Binary")]
public byte[] test { get; set; }

虽然上面的结果对我来说是一个 Binary(1) 列(这就是我到达这里的方式)。

编辑:要获得正确长度的二进制数组,只需在迁移文件中的 binary 之后添加 (16):

AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "binary(16)"));

不幸的是,将它添加到 Column 属性的类型名称中不起作用。

Edit2:通过创建自定义 MySqlMigrationSqlGenerator,无需编辑迁移文件即可获得正确的数据库。

internal class CustomMySqlMigrationSqlGenerator : MySqlMigrationSqlGenerator
{
protected override MigrationStatement Generate(CreateTableOperation op)
{
MigrationStatement statement = base.Generate(op);

foreach (ColumnModel column in op.Columns)
{
if (column.MaxLength.HasValue)
{
statement.Sql = statement.Sql.Replace($"`{column.Name}` binary", $"`{column.Name}` binary({column.MaxLength.Value})");
}
}

return statement;
}
}

关于c# - 使用 Entity Framework 4、MySQL 和代码优先存储字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8726639/

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