2016-09-29 13 views
0

まず、エンティティフレームワークv6.0 DBを使用しています。MetaDataクラスのIgnoreDataMember属性が機能しません。

特定のナビゲーションプロパティのために、あるクラスがシリアル化を壊すという問題があります。

私はautoに追加しているIgnoreDataMemberにCSクラスにを属性を生成し、予想通りすべてが(直列化が通過する)動作しますが、次回誰かがそれが消えスクリプトを生成するので、私はもちろん、そこにそれを残すことはできません私は以下のようなMetaDataクラスを作成しましたが、うまくいきません。

public class SomeClassMetaData 
{ 
    [IgnoreDataMember] 
    public virtual ICollection<SomeFoo> FOO { get; set; } 
} 

部分(非自動生成された)クラス:

[MetadataType(typeof(SomeClassMetaData))] 
public partial class SomeClass 
{ 

} 

(自動生成)クラスの一部部分:

public virtual ICollection<SomeFoo> FOO { get; set; } 

メタデータ(シリアライズはまだ壊れ)私はチェックした:

  • 部分的なクラスが同じ名前
  • 同じ名前空間
  • 部分公衆
  • オープニングモデルブラウザと節約の両方を持っています。

何が間違っているかわかりません。

答えて

1

悲しいことに[IgnoreDataMember]はEF6プロキシオブジェクトでは機能しません。メタデータ型はDataAnnotationsでのみ機能します。シリアル化のためには機能しません。エンティティのプロパティで直接指定する必要があります。クラス生成にT4テンプレートを使用する場合は、これらの属性をテンプレートに直接作成するロジックを追加することができます。これを行うために考慮する必要がある機能を「構造上の注釈」と呼びます。詳細については、このリンクをチェックしてください。ラジの答えによると、これを行うことができない

https://blogs.msdn.microsoft.com/efdesign/2008/08/12/structural-annotations-one-pager/

+0

ありがとうございました...私はそれを調べます...他のオプションは? –

+0

代替のオプションは、モデルを使用してプロパティを除外してビューモデルをシリアライズしますが、構造アノテーションよりも改善されているかどうかはわかりません。 – Bago

0

私が行った回避策は、そのナビゲーションプロパティなしでこのテーブルを選択することでした。 (私の場合は、oDataを使用して、これ以外のすべての列に対して$ selectを使用しています)

関連する問題