【问题标题】:Store byte array using Entity Framework 4, MySQL and code first?使用 Entity Framework 4、MySQL 和代码存储字节数组?
【发布时间】:2012-02-02 08:11:07
【问题描述】:

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

简单地做:

public byte[] Thumbnail {get; set;}

在创建时给我以下错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 附近

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

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

【问题讨论】:

  • 我错过了什么吗? Entity Framework 不是只兼容 SQL Server 吗?
  • @Yuck Entity 框架不仅兼容 SQL Server,你可以在这里查看列表:en.wikipedia.org/wiki/…
  • 但是对于代码优先它是一个更精简的列表
  • @Jani 但 mysql 仍应得到完全支持——据我所知。我选择将我的缩略图保存为一个文件,并且只存储 url - 尽管另一种方法是首选,所以我将问题留待解决。

标签: c# mysql entity-framework ef-code-first


【解决方案1】:

您需要使用 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;
    }
}

【讨论】:

  • 哇... 4 岁的帖子。嗯,我无法验证这是正确的,所以我只会相信你的话
  • 这个问题在 EF Core 2.1 中仍然出现(7 年后),使用第一方 MySQL 提供程序。 Pomelo 修复了这个问题,但如果不是选项,可以使用text 类型来存储二进制数据。
猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多