일반적으로에는 TransactionScope
- 인식을 나타내는 인터페이스가 있습니까? TransactionScope
을 활용하는 일반적인 데이터 라이브러리 목록이 있습니까? (DbConnection을 확장하거나 IDbConnection을 구현하는 것이 있습니까?)TransactionScope와 협력하는 데이터베이스 라이브러리는 무엇입니까?
TransactionScope
과 협력 데이터 라이브러리 간의 관계는 무엇입니까? 즉, TransactionScope
은 어떤 식 으로든 활성 연결을 검색하고 적절한 시작/커밋/롤백 메서드를 호출합니까? 데이터 라이브러리가 주위 TransactionScope
s를 찾습니까? 아니면 둘다?
배경이 필요한 경우. 몇 가지 서로 다른 트랜잭션과 같은 전략을 활용하는 예전 DAL을 다루고 있습니다.
//
// transactionless queries
//
// Microsoft.Practices.EnterpriseLibrary.Data. ...
Database db = SQLHelper.GetDatabase();
DbCommand cmd = db.GetStoredProcComment("doSomething");
db.AddInParameter(cmd, "p1", DbType.Guid, Id);
using (IDataReader r = db.ExecuteReader())
{
// etc.
}
//
// Transaction objects being passed around and attached to DbCommands
//
// somewhere up the line ...
DbConnection con = TransactionScopeConnections.GetConnection(db);
DbTransaction transaction = con.BeginTransaction();
// Microsoft.Practices.EnterpriseLibrary.Data. ...
Database db = SQLHelper.GetDatabase();
DbConnection con = TransactionScopeConnections.GetConnections(db);
DbCommand cmd = db.GetStoredProcComment("doSomething");
cmd.Transaction = transaction;
db.AddInParameter(cmd, "p1", DbType.Guid, Id);
using (IDataReader r = db.ExecuteReader())
{
// etc.
}
//
// queries in TransactionScopes
//
using (TransactionScope scope = new TransactionScope())
{
// Microsoft.Practices.EnterpriseLibrary.Data. ...
Database db = SQLHelper.GetDatabase();
DbCommand cmd = db.GetStoredProcComment("doSomething");
db.AddInParameter(cmd, "p1", DbType.Guid, Id);
using (IDataReader r = db.ExecuteReader())
{
// etc.
}
scope.Complete();
}
//
// both
//
Database db = SQLHelper.GetDatabase();
using (TransactionScope transactionScope = new TransactionScope())
{
DbConnection con = TransactionScopeConnections.GetConnection(db);
DbTransaction transaction = con.BeginTransaction();
/* ... build query ... */
query.transaction = transaction;
/* ... execute query, read results, if any ... */
transaction.Commit();
transactionScope.Complete();
}
Enterprise 라이브러리에서 유효한 옵션은 모두 있습니까? TransactionScope
양식이 의미가 있습니까? 마지막 양식이 중복 될 수 있습니까?
왜 VTC입니까? 질문이 명확하지 않거나 너무 광범위하다면 침묵하는 VTC보다는 건설적인 피드백이 좋을 것입니다! (이전 DAL을 통해 적극적으로 정렬하고 진행 상황을 이해하려고 시도합니다!) – svidgen
이것은 라이브러리와 아무 관련이 없습니다. 도서관이 밑에 사용하는 것과 관련이 있습니다. 그들이 ADO.NET을 사용한다면, 당신은 황금색입니다 (연결 문자열에 의해 호출 된 ADO.NET 제공자가 TransactionScope를 지원한다고 가정). –
@JohnSaunders 그렇다면 라이브러리에서 반환 한 데이터베이스 및/또는 연결 유형이 호환 가능한지 여부를 알아 보려면 무엇을 알아야합니까? 그리고이 객체들 사이의 관계의 본질은 무엇입니까? 즉, 연결을 만들고 트랜잭션을 생성해야합니까? 다른 길은? 아니면 주문하나요? – svidgen