まず、私の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は、コンテキストにロードされます。誰かが似たようなものに遭遇したかどうかは不明です
私はこの例では仮想を置くことができませんでしたが、実際に私のモデルに設定されていることを保証することができます。私の例を更新します。上記のように、プロセスコンストラクタに対するあなたのコメントに関しては、Microsoft Unityリゾルバを使用してUnity.MVC3バージョンを削除すると、実際にステータスが表示されます。 – DDiVita
'processEntity'の型は何ですか(実際の実行時の型)? –
プロセスエンティティタイプです。同上。あなたが見るすべては、私のセットアップと同じです。唯一の違いは、Unity.MVC3リゾルバの使用です。それは、UoWがある時点で投げ捨てられているようなものです。 – DDiVita