Debe utilizar el atributo MaxLength.
[MaxLength(16)]
public byte[] test { get; set; }
Tenga en cuenta que lo anterior lo convierte en un tipo de datos TINYBLOB, wich can have indexing/primary key problems. Al utilizar las migraciones se convierte en esto:
AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "tinyblob"));
Usted puede utilizar el atributo column
y establecer TypeName
-"Binary"
si necesita indexación/clave principal.
[MaxLength(16), Column(TypeName = "Binary")]
public byte[] test { get; set; }
Aunque lo anterior da como resultado una columna Binaria (1) para mí (así es como llegué aquí).
Editar: Para obtener una matriz binaria de longitud correcta, basta con añadir (16)
después binary
en el archivo de migración:
AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "binary(16)"));
Desafortunadamente, añadiendo que la typename del atributo de columna no funciona.
Edit2: Es posible obtener una base de datos correcta sin necesidad de editar el archivo de migración creando un MySqlMigrationSqlGenerator personalizado.
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;
}
}
¿Echo de menos algo? ¿No es Entity Framework solo compatible con SQL Server? – Yuck
@Yuck Entity Framework no solo es compatible con SQL Server, puede ver la lista aquí: http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework#Entity_Framework_ADO.NET_providers –
Pero para el código primero es una lista más simple –