2016-10-19 7 views
0

データベースからエンティティコードファーストを使用しています。 これは私のuserモデルです。エンティティフレームワークのコードデータベースからの最初のコードデータベースの「ビット」として指定されたフィールドの属性を変更するための移行を実行します。

public partial class User 
    { 
     //other fields 
     [Required] 
     [MaxLength(15)] 
     public string Passkey { get; set; } 
     [Required] 
     public bool isAdmin { get; set; } 
    } 

私は、これが変更された形態である(public string Passkey { get; set; }としてモデルにstringbyteからタイプを変更することにより、私はこれは、varbinaryからvarcharUsers表にPasskey列を変更したい場合は、以下に生成されたコード)。私はデータ型を更新することができました。

public partial class AddPasskey : DbMigration 
     { 
      public override void Up() 
      { 
       AlterColumn("dbo.Users", "Passkey", c => c.String(nullable: false, maxLength: 15)); 
      } 

      public override void Down() 
      { 
       AlterColumn("dbo.Users", "Passkey", c => c.Binary(nullable: false, maxLength: 15)); 
      } 
     } 

この 'isAdmin'プロパティはrequiredと設定されています。このrequired検証を削除し、デフォルト値を0に設定したいと思います。Passkeyのマイグレーション用に自動生成されたコードをコピーして変更しました。以下は変更されたコードですが、間違っています。

public partial class AddisAdmin : DbMigration 
     { 
      public override void Up() 
      { 
       AlterColumn("dbo.Users", "isAdmin", c => c.bool(nullable: false, defaultValue:0)); 
      } 

      public override void Down() 
      { 
       AlterColumn("dbo.Users", "isAdmin", c => c.bool(nullable: false)); 
      } 
     } 

この移行はどのように実行しますか?データベースにbitとして指定されたフィールドを更新するための正しい構文は何ですか?

答えて

0

まず、Enable-Migrationsにする必要があります。これは、Migrationsディレクトリを生成します。これは既に実行している可能性があります。

移行を設定したら、Update-Databaseを実行して実行することができます。

[ツール]メニューの[パッケージマネージャコンソール]から上記のコマンドを実行します。 bool?構文またはNullable<bool>を使用して、あなたにnulableなどのモデルタイプを定義し、すべての

Sql("ALTER TABLE dbo.Users ALTER COLUMN isAdmin BIT")

+0

の移行にデフォルト値を設定することができます'Passkey'列の更新が可能になりました。エラーは 'isAdmin'フィールドの型を更新するための構文です。 –

+0

Sql()を使うことができるはずです。 'Sql(" ALTER TABLE dbo.Users ALTER COLUMN isAdmin BIT ") – Stuart

0

まず:

また、データの種類を変更するには、あなたもSql()メソッドを介してSQLを実行することができます。あなたのコードでヌル入力可能でないものは、データベースではオプションではありません。したがって、それをヌル可能にして、isAdminプロパティの上のモデルから[Required]データアノテーションを削除してください。

0

あなたが手動で追加したコードを削除し、新しい移行し、新しいファイルを追加するために、再度add-migrationコマンドを実行するには、必要な変更を使用して作成する必要があり、そこにあなたはそれを変更し、ゼロ

関連する問題