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'です。
修正方法を教えてください
以前に同様の問題に遭遇したことがあり、それを解決する方法はモデルからテーブルを削除することであることがわかりました。モデルを保存して閉じます。次に、モデルを再度開き、テーブルを再度追加します。
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"
保存して再構築します。
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
心配する必要はありません。モデルで影響を受けるテーブルを選択します。観察すると、整数を含む修正後の新しい列名が見つかります(この動作は、その列のデータ型が変更されたためにのみ発生します)。
列名が「Samplecolumn」である場合の例は、データベースからモデルを更新した後、Samplecolumn1で新しい列を取得します。これで、一般的なカテゴリのプロパティウィンドウを使用して、古い列「Samplecolumn」を削除し、新しい列「Samplecolumn1」の名前を「Samplecolumn」に変更できます。
アプリをビルドするだけです。エラーはなくなります。
myModel.edmx xmlファイルに移動し、バイナリを文字列に変更して問題を解決しました