よろしく、
移行とバイナリ フィールドに問題があります...
私の最初の移行は次のようになります (既存のデータベースがありました)。
public override void Up()
{
CreateTable("dbo.Words", c => new
{
ID = c.Int(nullable: false, identity: true),
Name = c.String(maxLength: 4000),
Image = c.Binary(),
Audio = c.Binary(),
}).PrimaryKey(t => t.ID);
}
Entity クラスは次のとおりです。
public class Word
{
public int ID { get; set; }
public string Name { get; set; }
[MaxLength]
public byte[] Image { get; set; }
[MaxLength]
public byte[] Audio { get; set; }
}
自動移行をオンにしています。データベースからすべてのテーブルを削除して「Update-Database」を実行すると、次のようになります。
Applying code-based migration: 201304211813502_InitialMigration.
Applying automatic migration: 201304212024538_AutomaticMigration.
System.Data.SqlServerCe.SqlCeException (0x80004005): Cannot alter column of type NTEXT or IMAGE [ Column Name = Image ]
そのため、何かが同期していないようです..「Add-Migration AutoMigration」を実行して、エンティティフレームワークがまだ更新されている必要があることを確認します...取得したファイルは次のとおりです。
public partial class AutoMigration: DbMigration
{
public override void Up()
{
AlterColumn("dbo.Words", "Image", c => c.Binary());
AlterColumn("dbo.Words", "Audio", c => c.Binary());
}
public override void Down()
{
AlterColumn("dbo.Words", "Audio", c => c.Binary(maxLength: 4000));
AlterColumn("dbo.Words", "Image", c => c.Binary(maxLength: 4000));
}
}
だから...これから、EFはImageとAudioフィールドがBinary(maxLength:4000)であると考えているように見えます..しかし、そうではないはずです!! (最初の移行ではBinary()であるため)。
そのため、私は立ち往生していて、移行を最新の状態に保つことができません...そしてMaxLength(無制限)のバイナリフィールドが必要です...
ここで何が起こっているのでしょうか?ありがとう!デビッド