2

データ永続化のために Entity Framework 5.0 を使用して ASP.Net MVC 4 Web アプリケーションを開発しています。開発中に Code First と Automatic Migrations を使用しています。

既存のデータベースで作業する必要があったため、この役立つチュートリアルを使用して、ドメイン クラス
コードを最初に既存のデータベースに作成しました。

モデルにtblcourseapplicantという名前のクラスがあり、これにはManagerTitleという String プロパティがあります。このデータ型をIntに変更したいのですが、そのために POCO クラスのプロパティを変更しました

から

public string ManagerTitle { get; set; }

public int ManagerTitle { get; set; }

次に、Fluent API を使用して、関連するマッピング クラス (tblcourseapplicantMap) のプロパティ属性を変更しました。

から

this.Property(t => t.ManagerTitle).HasMaxLength(5);

this.Property(t => t.ManagerTitle).IsRequired();

また、この特定の列のデータベース内のすべてのデータを更新して、すべての値が整数に変換されるようにしました。

プロジェクトを実行すると、自動移行がこの更新を実行しようとしましたが、次のエラーが返されます

値 NULL を列 'ManagerTitle'、テーブル 'tblcourseapplicant' に挿入できません。列はヌルを許可しません。更新は失敗します。ステートメントは終了されました。

データベース テーブルに ManagerTitle が NULL であるレコードがなく、すべて整数値が割り当てられているため、これがなぜなのか理解できません。

どんな助けでも大歓迎です。

ありがとう。

アップデート

皆さん、私はまだこの問題の解決策を見つけるのに苦労しています。戻ってくるエラーはSqlExceptionであることに気付きました。アイデアはありますか?ここで何が問題なのかわかりません。私の理解では、Code First Automatic Migrations はこの単純なプロパティ データ型の変更を処理できるはずです。

ヘルプ!

4

2 に答える 2

3

列はデータベースでnull許容として定義されていますか?

POCOでnull許容にすることもできます

public int? ManagerTitle { get; set; }
于 2013-01-24T12:05:38.083 に答える
1

非自動移行で同様の更新を行うと、更新コードは古い列を削除し、名前が変更された (または再入力された) プロパティ間のデータ移行なしで新しい列を作成するだけです。

これがあなたの問題に当てはまるのではないかと思います。

于 2013-01-24T20:09:27.403 に答える