Entity Framework Code First で IRepository パターンを使用してオブジェクトをフェッチしようとしています。通常、リポジトリを呼び出すと、コンテキストに関連付けられたオブジェクトが返され、変更が追跡されます。私の問題は、リポジトリが切り離されたオブジェクトのみを返すように見えることです。
あるオブジェクトを別のオブジェクトに追加するとき、何らかの理由で容器が切り離されたものとして処理されるため、savechange は、相互に接続されている両方のオブジェクトを一方を挿入し、もう一方を外部オブジェクトとして接続するのではなく、挿入されたものとして扱います。そもそもクエリ時にアタッチする必要があるため、血管オブジェクトをアタッチすることで解決できることはわかっています。これは探しているものではありません。
Iリポジトリ
T FirstOrDefault(Expression<Func<T, bool>> predicate);
EFRepository (IRepository の実装)
public T FirstOrDefault(Expression<Func<T, bool>> predicate)
{
return Context.Set<T>().FirstOrDefault(predicate);
}
それを呼び出す
private readonly IRepository<VesselModel> _vesselRepository;
private readonly IRepository<InspectionModel> _inspectionRepository;
public Constr(IRepository<VesselModel> vesselRepository, IRepository<InspectionModel> inspectionRepository){
_vesselRepository = vesselRepository;
_inspectionRepository = inspectionRepository;
}
public void RunConnection(int vesselId){
var vessel = _vesselRepository.FirstOrDefault(x=> x.OrigId == vesselId);
var inspection = new Inspection{Vessel = vessel};
_inspectionRepository.Add(inspection);
_inspectionRepository.SaveChanges();
}