web-dev-qa-db-ja.com

Entity Frameworkモデルの更新

EFを使い始めたばかりで、クールだと思いましたが、問題が発生しました。

問題:
テーブルUser内の列のDBスキーマを変更しました。以前はVarbinary(50)でしたが、それをVarChar(50)に変更してから、MyModel.edmxデザイナー内で「データベースからモデルを更新」を選択しました"、[完了]をクリックした後、このエラーを受け取りました。

エラー:

エラー2019:指定されたメンバーマッピングは無効です。
メンバーのタイプ '.Edm.Binary [Nullable = False、DefaultValue =、MaxLength = 100、FixedLength = False]' 
タイプ 'LearnDBModel.User'の 'Email'は、メンバー 'Email' [のSqlServer.varchar 
 [Nullable = False、DefaultValue =、MaxLength = 50、Unicode = False、FixedLength = False]と互換性がありません。 ____。]タイプは 'LearnDBModel.Store.User'です。

修正方法を教えてください

24
Owais Qureshi

以前に同様の問題に遭遇したことがあり、それを解決する方法はモデルからテーブルを削除することであることがわかりました。モデルを保存して閉じます。次に、モデルを再度開き、テーブルを再度追加します。

61
Shawn de Wet

Shawn de Wetの解決策は問題なく機能しますが、テーブルを削除したくない場合(たとえば、他のいくつかのテーブルとの関係など)は、別の解決策を使用できます:xmlエディターでedmxファイルを開き、Ctrl + Fで次のような行を見つけます

プロパティ名= "Email" Type = "Binary" Nullable = "false" MaxLength = "50" FixedLength = "false"

次のように更新します。

プロパティ名= "Email" Type = "String" Nullable = "false" MaxLength = "50" Unicode = "false" FixedLength = "false"

保存して再構築します。

15
Chris Phan

EFモデルの多くのファイルがf ***** dになります。エンティティの削除と追加では不十分でした。エンティティはtable、table1、table_result、table1_result、table_result1などのように複製されました...モデルの更新では、複製された参照が元の参照ではなく更新されていました。

メモ帳を開いて、これらのファイルを手動で修正する必要があります。

EFModel.Context.cs
EFModel.edxm

そして、これらのファイルを削除します:

obj\Debug\edmxResourcesToEmbed\MYEfModel.csdl
obj\Debug\edmxResourcesToEmbed\MYEfModel.msl
obj\Debug\edmxResourcesToEmbed\MYEfModel.ssdl
4
Tomas Kubes

心配する必要はありません。モデルで影響を受けるテーブルを選択します。観察すると、整数を含む修正後の新しい列名が見つかります(この動作は、その列のデータ型が変更されたためにのみ発生します)。

列名が「Samplecolumn」である場合の例は、データベースからモデルを更新した後、Samplecolumn1で新しい列を取得します。これで、一般的なカテゴリのプロパティウィンドウを使用して、古い列「Samplecolumn」を削除し、新しい列「Samplecolumn1」の名前を「Samplecolumn」に変更できます。

アプリをビルドするだけです。エラーはなくなります。

1
MSRS

myModel.edmx xmlファイルに移動し、バイナリを文字列に変更して問題を解決しました