1

Entity Framework が作成した生成済みデータ クラスの 1 つにプロパティを追加しようとしています。別の生成されたクラスでまったく同じことを問題なく実行しましたが、何らかの理由でこのクラスでは機能しません。

生成された 2 つのオブジェクトの唯一の違いは、1 つは単純なテーブル マッピング (機能するオブジェクト) であり、もう 1 つは別のオブジェクトから継承される (機能しないオブジェクト) ことです。言い換えれば、1 つのテーブルは 2 つのエンティティを表し、いくつかの基準に基づいて、それを抽象化し、2 つの継承エンティティを作成しました...

<EntityType Name="Product" Abstract="true">
    <Key>
        <PropertyRef Name="Id" />
    </Key>
    <Property Name="Id" Type="String" Nullable="false" />
</EntityType>
<EntityType Name="Key" BaseType="MyEntities.Product">
    <Property Name="Status" Type="String" Nullable="true" />
    <Property Name="SerialNumberString" Type="String" Nullable="true" />
</EntityType>
<EntityType Name="License" BaseType="MyEntities.Product" >
    <Property Name="ProductCode" Type="String" Nullable="true" />
    <Property Name="Version" Type="String" Nullable="true" />
</EntityType>

次に、次のプロパティを追加しました...

public partial class Key
{
    public int? SerialNumber
    {
        get
        {
            int serialNumber;
            if (int.TryParse(SerialNumberString, out serialNumber))
            {
                return serialNumber;
            }

            return null;
        }

        set
        {
            SerialNumberString = value.ToString();
            ReportPropertyChanged("SerialNumber");
        }
    }
}

ReportPropertyChanged が呼び出されると、次の例外がスローされます。

System.ArgumentException: プロパティ 'SerialNumber' には、エンティティ オブジェクトに対する有効なエンティティ マッピングがありません。詳細については、Entity Framework のドキュメントを参照してください。

スローしない別の生成されたデータ クラスに IDENTICAL コードがあります。唯一の違いは継承です。何が起こっているのですか??

4

3 に答える 3

1

EFに関する限り、SerialNumberプロパティはありません。それについて知っている唯一のプロパティSerialNumberString

つまり、SerialNumberString変更されるのはプロパティであり、SerialNumber.

つまり、次のようにしますReportPropertyChanged("SerialNumberString")

実際、SerialNumber セッターで Public SerialNumberString セッターを呼び出しているため、コードでは冗長です。

set
{
    SerialNumberString = value.ToString();
    ReportPropertyChanged("SerialNumberString");
}

したがって、SerialNumberStringセッターはReportPropertyChanged("SerialNumberString")とにかく呼び出します...したがって、その行を完全に削除する必要があります。

set
{
    SerialNumberString = value.ToString();
}

お役に立てれば

アレックス

ところで、おそらくvalue.HasValue == falseセッターでも処理する必要があります。

于 2009-07-09T04:07:00.387 に答える
0

私はこれまでこの種のことをしたことがありませんが、マッピングで「SerialNumberString」と表示され、不平を言っているプロパティが「SerialNumber」であることに気付きました。それらは同じであるという意味ですか?

于 2009-07-09T02:19:40.570 に答える
0

暗闇の中でのショットです。「キー」は予約語ですか?私だったら、エンティティ名をデータ構造との関連性が低い名前に変更します。

トラブルシューティングのために、継承されたクラスの代わりに基本クラス「製品」を拡張した場合、このエラーは発生しますか?

于 2009-07-09T02:40:17.527 に答える