È necessario utilizzare l'attributo MaxLength.
[MaxLength(16)]
public byte[] test { get; set; }
nota che le spire sopra in un tipo di dati TINYBLOB, wich can have indexing/primary key problems. Quando si utilizzano le migrazioni si trasforma in questo:
AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "tinyblob"));
È possibile utilizzare l'attributo column
e impostare TypeName
-"Binary"
se avete bisogno di indicizzazione/chiave primaria.
[MaxLength(16), Column(TypeName = "Binary")]
public byte[] test { get; set; }
Sebbene quanto sopra risulta per me in una colonna binaria (1) (è come sono arrivato qui).
Modifica: Per avere una lunghezza corretta matrice binaria, è sufficiente aggiungere (16)
dopo binary
nel file di migrazione:
AddColumn("dbo.testDB", "test", c => c.Binary(storeType: "binary(16)"));
Purtroppo, aggiungendo che la la typename dell'attributo Colonna non funziona.
Modifica2: è possibile ottenere un database corretto senza la necessità di modificare il file di migrazione creando un MySqlMigrationSqlGenerator personalizzato.
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;
}
}
Mi sono perso qualcosa? Entity Framework non è compatibile solo con SQL Server? – Yuck
@Yuck Entity framework non è solo compatibile con SQL Server, puoi vedere l'elenco qui: http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework#Entity_Framework_ADO.NET_providers –
Ma per il codice prima è un elenco più snello –