-1

コードファーストアプローチを使用し、既存のシステムのデータベースを実装します。したがって、既存のコードに多くの変更を加えることはできません。そのため、FluentAPIとEntityFrameworkを使用しています。

他のいくつかのクラスで使用される新しいクラス()を実装しようとするとVector、コンパイルエラーが発生します。

The relationship 'Price_Data' was not loaded because the type 'Vector' is not available.
The following information may be useful in resolving the previous error:
The property 'Item' of type 'Vector' in the assembly 'Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' cannot be used as a scalar property because it does not have both a getter and setter.

私は.NET(Javaから来ている)にかなり慣れていないので、どこからエラーを探し始めるのかわかりません。

ここの誰かがその理由とこれを修正する方法を知っていますか?

4

3 に答える 3

2

エラーメッセージを注意深く読むと、問題は非常に明確です。

アセンブリ'Core、Version = 0.0.0.0、Culture = neutral、PublicKeyToken =null'のタイプ'Vector'のプロパティ'Item'は、getterとsetterの両方がないため、スカラープロパティとして使用できません。

クラスVectorにはItemgetterまたはsetterがありますが、両方はありません。EntityFrameworkが正しく機能するには、読み取り/書き込みプロパティが必要です。

無関係なメモ:提案

ドメインオブジェクトのプロパティが仮想(つまりpublic virtual string PropertyName)としてマークされていない場合、遅延読み込みを利用できません。つまり、クエリによって結果セット全体が読み込まれ、結果として非常に非効率的なデータになります。 O(ネットワークトラフィックが増え、読み込み時間が長くなり、結局のところ、アプリケーション/サービスが遅くなります)。

于 2013-02-26T08:46:43.030 に答える
1

get私がとても太字であるかもしれない場合、エラーの種類は明確に言います:タイプVector(アセンブリコア内)のプロパティItemには、とset句の両方がありません。EFで使用する場合は1つ必要です。

于 2013-02-26T08:46:38.310 に答える
0

なぜこれが起こっているのかを知りました。

VectorIndexerプロパティ、別名がありますpublic var this[]別のStackOverflow投稿に感謝します。

現在のところ、Fluent APIはこの種の問題を処理できません。これに対処する最も簡単な方法は、データ注釈とを使用すること[NotMapped]です。

結果のコードは次のようになります。

class Vector
{
    [NotMapped]
    public var this[]
    {
    }
}

この問題で私を助けようとして時間を割いてくれたすべての人に感謝したいと思います。

于 2013-03-05T09:48:20.983 に答える