2012-01-04 17 views
5

ちょっと私はEF 4 MySQL(最新のコネクタ)とコードファーストアプローチを使って簡単なbyte[]を保存しようとしています。単にEntity Framework 4、MySQL、コードを使用してバイト配列を格納しますか?

をやって:

public byte[] Thumbnail {get; set;} 

は私の作成時に次のエラーを与える:

あなたのSQL構文でエラーが発生しています。 が

近くを使用する権利構文についてはMySQLサーバのバージョンに対応し、それは右の私の byte[]宣言の後に来るものを指していることを、マニュアルをご確認ください。

誰でも私のためのクイックヒントを手に入れましたか?

+0

私は何かを見逃しましたか? Entity FrameworkはSQL Serverとのみ互換性がありますか? – Yuck

+0

@Yuck EntityフレームワークはSQL Serverと互換性があるだけではありません。http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework#Entity_Framework_ADO.NET_providers –

+0

しかし、コードの最初のほうが、よりリーンなリスト –

答えて

2

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を使用して、インデックス/主キーが必要な場合は"Binary"TypeNameを設定することができます。

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

上記の結果は、私にとってはバイナリ(1)の列になります(ここで私が得た方法です)。

編集:単に移行ファイルにbinary(16)を追加し、正しい長さのバイナリ列を取得するには:

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

残念ながら、列の属性の型名が動作しない、それを追加します。

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; 
    } 
} 
+0

うわー... 4歳のポスト。うーん、私はこれが正しいことを検証する方法がないので、あなたの言葉を取って – Dynde

関連する問題