2011-11-09 3 views
2

Entity Framework 4.2とオブジェクトを使用してSQL CE 4.0データベースを作成しようとしています。WCF ExtensionDataObjectにより、Entity Framework 4.2がデータベースの作成に失敗する

私のクラスはWCFサービスで定義されています。

私は1つの基本クラスがあります。

public class BaseData 
{ 
    public DateTime LastUpdated { get; set; } 
    public int StatusTypeId { get; set; } 
    public StatusType StatusType { get; set; } 
    public RecordStatusEnum RecordStatus { get; set; } 
} 

と1継承したクラスをベースクラスは、WCFによってシリアライズされた場合

public class JobType : BaseData 
{ 
    public int JobTypeId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public int SortOrder { get; set; } 

    public virtual ICollection<Role> Roles { get; set; } 
} 

それはExtensionDataObjectプロパティを追加

public partial class BaseData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { 

    [System.NonSerializedAttribute()] 
    private System.Runtime.Serialization.ExtensionDataObject extensionDataField; 

    [global::System.ComponentModel.BrowsableAttribute(false)] 
    public System.Runtime.Serialization.ExtensionDataObject ExtensionData { 
     get { 
      return this.extensionDataField; 
     } 
     set { 
      this.extensionDataField = value; 
     } 
    } 

これを次のエラーでJobTypeクラスからテーブルを作成するときにEFがクラッシュする:

セットJobTypes私はこの問題を回避するにはどうすればよい

にプロパティJobType.ExtensionDataのために指定されていませんマッピング?

答えて

0

ExtensionDataプロパティにNotMapped属性を追加してマッピングから除外します。このフィールドを維持することはできません。あなたのデータコンテキストの定義で

+0

どのようにNotMapped属性を追加しますか? –

+0

マップしたくないプロパティで、あなたのケースでは 'ExtensionData'です。 –

+0

これは私が作成したプロパティではありません。プロキシで自動的に作成されます。私はその財産を取り除きたい。 –

3

、extensiondataプロパティはから来ているクラスを無視するOnModelCreatingをオーバーライドします。JobTypeクラスで

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Ignore<System.Runtime.Serialization.ExtensionDataObject>(); 
    base.OnModelCreating(modelBuilder); 
} 
+0

興味深い。これをチェックします。 –

0

、あなたはprivateとしてそれを再宣言によって継承ExtensionDataプロパティを非表示にすることができます。これを行うには、の後にキーワードnew rigthを含める必要があります。これは、コンパイラに、基本クラスからプロパティを非表示にして、代わりにこの宣言を使用するように指示します。

public class JobType : BaseData { 
    public int JobTypeId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public int SortOrder { get; set; } 

    public virtual ICollection<Role> Roles { get; set; } 

    [global::System.ComponentModel.BrowsableAttribute(false)] 
    private new System.Runtime.Serialization.ExtensionDataObject ExtensionData 
    { 
     get { return base.ExtensionData; } 
     set { base.ExtensionData = value; } 
    } 
} 

ExtensionDataニーズは、このクラスを使用して、いくつかの機能の公開する場合は、代わりに民間の公開を使用して同じ方法でそれを行うには、このようなNotMapped属性を追加することができます

[global::System.ComponentModel.BrowsableAttribute(false), NotMapped()] 
    public new System.Runtime.Serialization.ExtensionDataObject ExtensionData 
    { 
     get { return base.ExtensionData; } 
     set { base.ExtensionData = value; } 
    } 

これをところで、宣言にNotMapped属性を追加する以外は何も変更しません。

関連する問題