3

このエラーが発生しました。原因については確信がありますが、修正方法がよくわかりません。

私は使用entity framework code firstしており、意図的に設定したエンティティの1つに外部キーがありますlong?:

public long? ClientId { get; set; }
public virtual Client Client { get; set; }

次に、作成したデータベースのデータを使用して入力するDataGridViewと、ここで問題が発生します。の要素を介してカスタム検索/フィルタリングを使用してdgvおり、このカスタム フィルタリングのコードは継承されています。今までは問題なく機能していましたが、フィルタリングしようとするとClientID、投稿名のエラーが発生します。

私はデバッグを開始し、これを見ました:

if (property.PropertyType == typeof(string))
                        {//some code
else if (property.PropertyType == typeof(bool))
                        {//other code
else if(rule.Data.Equals("1") || rule.Data.ToLower().Equals("true"))
                            {//again some code
else if (property.PropertyType == typeof(Int32))
                        {//some code
...

そして、私の値は型long?であるため、以下の条件に該当しないため、コードは次のデフォルト条件に入ります。

else
   {
       long value = 0;
       if (long.TryParse(rule.Data, out value))
   {..code

デバッガーによると、本体に入るため、解析は true を返しますifが、上記からエラーを受け取り、プロパティのタイプは ですSystem.Nullable1[System.Int64]

まったく同じロジックを使用する 2 番目の外部キーがあり、すべてが正常に機能します。私が見ることができる唯一の違いは、作業ケースのタイプはlongであり、エラーケースのタイプはlong?です。

タイプを残したいのですがlong?、この場合の回避策があるかどうかわかりません。

4

1 に答える 1

0

これは古い質問であることは知っていますが、 の生成がT?実際には機能しないケースに遭遇しましたが、それを に変更するとNullable<T>機能します。つまり、 に適しているが に適してlongいないコードを生成しますlong?

あなたの場合:

public Nullable<long> ClientId { get; set; } // change long? to Nullable<long>
public virtual Client Client { get; set; }

それは役に立ちますか?

于 2014-09-19T08:32:09.460 に答える