2009-07-09 10 views
1

Entity Frameworkによって作成された生成されたデータクラスのいずれかにプロパティを追加しようとしています。私は別の生成されたクラスで問題なく、まったく同じことをやったし、何らかの理由でこのクラスでは動作しません。Entity Framework:生成されたデータオブジェクト例外のカスタマイズ

生成された2つのオブジェクト間の唯一の違いは、一つだけストレートテーブルマッピング(動作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のマニュアルを参照してください。

私は、唯一の違いは、いただきました!を継承スローしません別の生成されたデータクラスで同じコードを

が起こっているしています?

答えて

0

私は前にこの種のものをやったことがないが、私はそれが「SerialNumberString」と言うマッピングに気付き、それは文句のプロパティには、「のSerialNumber」です。彼らは同じであることを意味していますか?

+0

SerialNumberStringは数値データのみを含むnvarcharカラムにマップされるため、追加したSerialNumberプロパティがラッピングされているので、数値として使用できます。 – andrej351

+0

ええ、それはEFが好きではないかもしれないと言います。"SerialNumber"の名前を "SerialNumber2"に変更し、 "SerialNumber2"について不平を言うかどうか確認してください。エンティティはこれを実装しようとする前に、数週間のために、この構造では正常に動作しているよう –

+0

葉には、名前に関係なく – andrej351

0

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

トラブルシューティングの場合、継承したクラスではなく、基本クラス「製品」を拡張する場合にこのエラーが発生しますか?

+0

の名称「キー」の問題をイマイチありません。 私はProductクラスの部分的な拡張にプロパティを追加しようと、それは(「セット」SerialNumberString doesntのは、製品に存在するようちょうどReportPropertyChangedへの呼び出しを持っていた)同じ行に投げました。 – andrej351

1

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

だからそれが変更されSerialNumberString財産である、ないSerialNumber

つまり、これを行う:ReportPropertyChanged("SerialNumberString");

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

のでSerialNumberStringセッターはとにかくReportPropertyChanged("SerialNumberString")を呼び出します...ので、あなただけのその行を削除する必要があります:あなたはのSerialNumberセッターすなわち公共SerialNumberStringセッターを呼び出しているので、あなたのコード内で重複している事実

完全:

set 
{ 
    SerialNumberString = value.ToString(); 
} 

ホープ、このことができます

アレックス

ご存知のように、セッターでvalue.HasValue == falseと扱ってください。

関連する問題