C# 首先使用实体框架4、MySQL和代码存储字节数组?
嘿,我正在尝试使用EF4MySQL(最新的连接器)和代码优先的方法存储一个简单的C# 首先使用实体框架4、MySQL和代码存储字节数组?,c#,mysql,entity-framework,ef-code-first,C#,Mysql,Entity Framework,Ef Code First,嘿,我正在尝试使用EF4MySQL(最新的连接器)和代码优先的方法存储一个简单的byte[] 简单地做: public byte[] Thumbnail {get; set;} 创建时给我以下错误: 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 接近 然后它指向我的byte[]声明后面的内容 有人能给我一些提示吗?你需要使用MaxLength属性 [MaxLength(16)] public byte[] test { get; set; } 请注意,上
byte[]
简单地做:
public byte[] Thumbnail {get; set;}
创建时给我以下错误:
您的SQL语法有错误;检查手册
对应于您的MySQL服务器版本,以便使用正确的语法
接近
然后它指向我的byte[]
声明后面的内容
有人能给我一些提示吗?你需要使用MaxLength属性
[MaxLength(16)]
public byte[] test { get; set; }
请注意,上面将其转换为tinyblob数据类型。使用迁移时,会变成这样:
AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "tinyblob"));
如果需要索引/主键,可以使用属性列
,并将类型名
设置为“二进制”
[MaxLength(16), Column(TypeName = "Binary")]
public byte[] test { get; set; }
虽然上面的结果对我来说是一个二进制(1)列(我就是这样得到这里的)
编辑:要获得正确长度的二进制数组,只需在迁移文件中的二进制
之后添加(16)
:
AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "binary(16)"));
不幸的是,将其添加到Column属性的typename中并不起作用
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;
}
}
我错过什么了吗?Entity Framework不是只与SQL Server兼容吗?@Yuck Entity Framework不仅与SQL Server兼容,您可以在这里看到列表:但对于代码优先,它更精简list@Jani但据我所知,mysql仍然应该得到充分支持。我选择将我的缩略图保存为一个文件,只存储url——尽管另一种方法更可取,所以我保留这个问题。哇。。。4岁的职位。嗯,我无法证实这是对的,所以我要相信你的话。这个问题仍然在EF Core 2.1中使用第一方MySQL提供商出现(7年后)。Pomelo解决了这个问题,但如果不是选项,可以使用
text
类型来存储二进制数据。