3

まず、私のUoWはDbContextから継承します。Unity.Mvc3をHierarchicalLifetimeManagerとUnit Of Workパターンで使用する遅延ローディングはありません

私はUnity.Mvc3を使用して上に移動し、私の登録に次の行を追加:私はこれに移動

Container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager()); 

たら、Entity Frameworkのための私の遅延ローディングが動作を停止するように見えたしました。ここでは一例です:私たちは要求を作成し、コール後までに終了されていないコードのステップ

//Process Service 
    public ProcessDto Create(ProcessDto dto) 
    { 
     var processEntity = new Process(){StatusId = dto.StatusId} 
     processRepository.Add(processEntity) 
     unitOfWork.Commit() 
     //at this point, before using Unity.Mvc3 the Status would be proxied into the processEntity. Moving to Unity.Mvc3 it is like Lazy Loading stopped working. 
     return Mapper.Map<Process,ProcessDto>(processEntity); 
    } 

のCre

を呼び出す前に

public class Process 
{ 
    public Guid Id {get;set;} 
    public virtual Guid? StatusId {get;set;} //this is the FK EF uses. 
    public virtual Status Status {get;set;} 
} 

public class Status 
{ 
    public Guid ID {get;set;} 
    public Name {get;set;} 
} 

//DTOs 
public class ProcessDto 
{ 
    public Guid Id {get;set;} 
    public Guid? StatusId {get;set;} //this is the FK EF uses. 
    public StatusDto Status {get;set;} 
} 

public class StatusDto 
{ 
    public Guid ID {get;set;} 
    public Name {get;set;} 
} 

Satusesは、コンテキストにロードされます。誰かが似たようなものに遭遇したかどうかは不明です

答えて

0

あなたのStatusプロパティは仮想ではないので、エンティティは遅延読み込みのためにプロキシされることはありません。Unityやその他のIoCコンテナはこれに影響しません。

また、Processコンストラクタを直接使用しています。プロセスのインスタンスを作成すると、プロキシできなくなり、遅延ロードが機能しなくなります。プロキシエンティティを取得するには、DbSet<Process>Createファクトリメソッドを使用する必要があります。

+0

私はこの例では仮想を置くことができませんでしたが、実際に私のモデルに設定されていることを保証することができます。私の例を更新します。上記のように、プロセスコンストラクタに対するあなたのコメントに関しては、Microsoft Unityリゾルバを使用してUnity.MVC3バージョンを削除すると、実際にステータスが表示されます。 – DDiVita

+0

'processEntity'の型は何ですか(実際の実行時の型)? –

+0

プロセスエンティティタイプです。同上。あなたが見るすべては、私のセットアップと同じです。唯一の違いは、Unity.MVC3リゾルバの使用です。それは、UoWがある時点で投げ捨てられているようなものです。 – DDiVita

関連する問題