2016-03-22 8 views
2

は、これは私がシリアル化しようとするオブジェクトです:シリアライズEntityオブジェクト

public class EmailAttachment 
{ 
    public int ID { get; set; } 
    public string Filepath { get; set; } 
    public string Filename { get; set; } 

    public int EmailID { get; set; } 

    [IgnoreDataMember] 
    public virtual ReceivedEmail Email { get; set; } 
} 

をそして、これは私のシリアル化コードです:

 var attachments = unitOfWork.EmailAttachmentRepository.Get(e => e.EmailID == emailID); 
     return Json(attachments, JsonRequestBehavior.AllowGet); 

問題は、私が[IgnoreDataMember]属性、EmailAttachmentEmailプロパティを置くものの、まだシリアル化されています。アタッチメントが最初にフェッチされると、コンソールでエンティティログが表示されます。Emailの遅延読み込みが有効になっているため、return Json(attachments, JsonRequestBehavior.AllowGet);が実行された場合、リスト内のすべての添付ファイルに対してがデータベースからフェッチされ、Email

どうすればいいですか?私はその仮想プロパティなしでEmailAttachmentだけを望む...

答えて

1

を使用する必要があります場合は:

var attachments = unitOfWork 
    .EmailAttachmentRepository.Get(e => e.EmailID == emailID, lazyloading: false); 

次に、あなたがあなたのコンテキストを作成場所:

using(var ctx = new MyContext()) 
{ 
     ctx.Configuration.LazyLoadingEnabled = lazyloading; //false 
     ... 
} 
+0

おかげで、私も設定でこれをやりました.ProxyCreationEnabled = false、その2つの違いは何ですか? – Aleksa

+1

@Aleksaプロキシは、自動的に変更を検出し、関係を修正し、lazyloadingを有効にするために使用されます。読み取り専用の目的(必要な場合など)で必要な場合は、プロキシを無効にするためにパフォーマンスが向上する可能性があります。しかし、遅延トラッキング(トラッキングを変更しない)だけを無効にしたい場合は、プロキシを残す必要があります。 –

1

IgnoreDataMemderは異なるスタックのために働く。

あなたは/無効に遅延読み込み可能にするために、別のboolを受け入れるために、あなたのコンテキストを作成したとき、私はあなたのGet方法を変更することをお勧めあなたが遅延読み込みを無効にすることができScriptIgnore Attribure

関連する問題