포털 앱에서 Linq-2-Sql과 함께 DDD에서 널리 사용되는 저장소 접근 방식을 모방하고 싶습니다.Linq-To-SQL에 대한 작업 단위 패턴 대 트랜잭션 범위?
public class LinqToSqlDal<DC,T>: IDisposable, IRepository<T>
where T: LinqEntity, new(),
where DC: DataContext, new()
{
private DC unitOfWork = null;
public LinqToSqlDal(string connectionString)
{
this.unitOfWork = Activator.CreateInstance(typeof(DC), connectionString) as DC;
}
public LinqToSqlDal(string connectionString, DataLoadOptions loadOptions): this(connectionString)
{
this.unitOfWork.LoadOptions = loadOptions;
}
public virtual void SubmitChanges() {
this.unitOfWork.SubmitChanges();
}
public virtual List<T> Get(Expression<Func<T,bool>> query)
{
return this.unitOfWork.GetTable<T>().Where(query);
}
public virtual void Delete(Expression<Funct<T, bool>> query)
{
this.unitOfWork.GetTable<T>().DeleteAllOnSubmit(this.unitOfWork.GetTable<T>().Where(query));
}
public virtual T GetByID<T>(Expression<Funct<T, bool>> query)
{
return this.unitOfWork.GetTable<T>().Where(query).SingleOrDefault();
}
public virtual object Add(T entity, string IDPropertyName)
{
this.unitOfWork.GetTable<T>().InsertOnSubmit(entity);
this.SubmitChanges();
var ID = (string.IsNullOrEmpty(IDPropertyName)) ? null :
entity.GetType().GetProperty(IDPropertyName).GetValue(entity, null);
return ID;
}
public virtual void SubmitChanges()
{
this.unitOfWork.SubmitChanges();
}
public void Dispose()
{
this.unitOfWork.Dispose();
}
}
그래서 지금은 개체가 속한 엔터티와의 DataContext에 이것을 사용할 수 있습니다 : 지금까지 나는이 있습니다. 내 질문은 -이 작은 저장소 혜택 내에서 TransactionScope를 전달하거나 인스턴스화하는 것이겠습니까? 지금까지 단 하나의 DataContext가 있지만 여러 개의 데이터 컨텍스트에서 트랜잭션을 보장하기 위해 현재 디자인을 수행 할 수있는 여러 가지 작업을 진행할 수 있습니까?
제네릭을 사용하여 컨텍스트를 래핑하고 클라이언트가 처분하도록하는 것이 좋은 방법입니까?
좋은 의견, 나중에 다른 구현으로 변경할 수 있도록 DataContext의 특정 구현을 추상화하는 방법에 대한 의사 코드를 제공 할 수 있습니까? – dexter