2011-08-03 25 views
3

私は不明な理由によりこの問題に直面しており、これを解決するためのフォーラムやブログを試しましたが、満足できる回答は得られませんでした。'yyyのxx'プロパティを 'String'値に設定できませんでした。このプロパティをタイプ 'Int32'以外の値に設定する必要があります

シナリオについて説明します。

私は、2つのテーブルの列からなるビューをデータベースに持っています。どのテーブルもデータ型が "int"の列を持たないため、結果のビュー(名前は "MyRecord"とします)にも "int"データ型の列はありません。ビュー内のすべての列には、データ型としてvarcharがあります。

私の.edmxでは、このビューを追加していて、すべてのプロパティがデータ型 "String"で正常に作成されたモデル(名前は "MyRecord")で問題なく作成されています。私はRIAサービスでSilverlightを使用しています。アプリケーションビルド後には、関連するプロキシも虚偽なく作成されています。

私のドメインコンテキストを使用して「MyRecord」をクエリしようとすると、問題が発生します。次のエラーが発生しています。

クエリ 'GetMyRecords'の読み込み操作が失敗しました。 'MyRecord'の 'CenterCode'プロパティを 'String'値に設定できませんでした。このプロパティを 'Int32'型のnull以外の値に設定する必要があります。

エラーで見られるように、「文字列」列「CenterCode」のデータ型を「Int32」に変換することは間違いありません。ビジネス上重要な意味を持つ "String"または "varchar"列は、 "Int32"または "int"に変更すると将来アプリケーションが中断される可能性があるためです。その真の "CenterCode"列には数値データしかありませんが、将来、それがなぜ 'varchar'データ型で作成されるのかという文字データが存在する可能性があります。

EFがサポートしていないため、データのタイプを変更することはできません。

私はSQL Serverプロファイラを使用しましたが、クエリが正しく実行されていて、エラーなしで同じクエリをSSMSで実行できます。このエラーは、EFがクエリによって返されたデータからオブジェクトを構築している場合にのみ、アプリケーションで発生します。

Entity Frameworkがこのエラーをスローする理由を理解できませんでした。「varchar」を「String」に変換し、不必要に「Int32」をピクチャに持ち込んで人生を難しくしています。私は最後の4時間からこの問題に苦しんでおり、それを解決するためのあらゆる方法を試しましたが、すべてが静脈にあります。

誰かがそれを持っている場合、いくつかの情報や解決策を提供してください。

EFチームには、この問題の解決策があるか、この問題を回避する必要があります。

答えて

1

この問題を解決したかどうかはわかりませんが、EFで複数の結果セットを処理しているうちに、このような問題が発生しました。私の場合、以前の結果からすべてのレコードを読み取ることができなかったため、私にとって問題の原因となったreader.NextResult()がありました。第2の結果セットのデータを最初のオブジェクトにマッピングしようとしたためにEFが失敗したと思います。

2

私はdoubleデータ型で同じ問題を抱えていました。

ソリューション

は、ビュー/プロシージャを変更し、同様に列をキャスト

:ストアドプロシージャでの私の問題を解決するcast(columnname as int32)

+3

これが機能しても、どのように意味があるのでしょうか?私が理解していることから、オープナーは自分のテーブルにintデータ型が含まれておらず、すべてがvarcharであると言います。なぜint32としてのキャストが必要なのでしょうか?または、なぜ、フィールドがintでなければ、EFが式をintに変換しようとしているのですか?私は同じ問題を抱えていますが、ダブルもあり、何が起こっているのか把握しようとしています。 – dtc

1

CAST(columnName as Type)

関連する問題