2009-08-10 1 views
2

엔터프라이즈 라이브러리 4.1을 사용하고 있습니다.EntLib IDisposable 변환

것은 내가 사용하여 코드를 실행하고 있지만 :

using ( _db = DatabaseFactory.CreateDatabase("NLayerDB")) 
{ 
    DbCommand dbCommand = _db.GetStoredProcCommand("someSPName"); 
    _db.AddInParameter(dbCommand, "Id", DbType.Int32, id); 
    result= _db.ExecuteNonQuery(dbCommand); 
} 

나는 다음과 같은 오류 받고 있어요 : System.IDisposable

에 암시 적으로 변환 할 수 있어야 사용하여 문에 사용

Microsoft.Practices.EnterpriseLibrary.Data.Database 유형을 USING의 정확한 문구는 무엇입니까?

답변

2

실제로 사용하면 아무 것도 얻지 못합니다 (그리고 실제로 언급했듯이 실제로 컴파일되지는 않습니다).

개체 작성 코드의 "using"문을 사용하면 "using"블록이 종료 될 때 만든 개체가 삭제됩니다. 다른 형식을 명시 적으로 처리 할 수 ​​없기 때문에 IDisposable을 구현하는 개체에 대해서만 의미가 있습니다.

당신은 안전하게 사용하여 블록을 제거하고이 끝낼 수 있습니다

_db = DatabaseFactory.CreateDatabase("NLayerDB"); 
DbCommand dbCommand = _db.GetStoredProcCommand("someSPName"); 
_db.AddInParameter(dbCommand, "Id", DbType.Int32, id); 
result = _db.ExecuteNonQuery(dbCommand); 

DbCommand이는 IDisposable (나는 EntLib의 DAAB를 사용한 적이 한, 잘 모르겠어요) 다음 방금 그 부분을 포장 할 수 있습니다 구현하는 경우

_db = DatabaseFactory.CreateDatabase("NLayerDB"); 
using (DbCommand dbCommand = _db.GetStoredProcCommand("someSPName")) 
{ 
    _db.AddInParameter(dbCommand, "Id", DbType.Int32, id); 
    result = _db.ExecuteNonQuery(dbCommand); 
} 
+0

DbCommand는 IDisposable을 구현합니다 – Coops

1

Microsoft.Practices.EnterpriseLibrary.Data.Database이 IDisposable를 구현하지 않습니다는 using statement에 대한 요구는 다음과 사용하여 블록의 코드.

DbCommand 개체는 IDisposable을 구현하므로 대신 using 문에서 해당 개체를 사용하는 것이 더 적절할 수 있습니다.

+0

오! 궁금하네요 ... 그럼 Garbage collection이 EntLib 데이터베이스에서 어떻게 작동합니까? – user146584

+0

가비지 수집은 다른 관리되는 개체와 마찬가지로 데이터베이스에서 작동합니다. 더 이상 사용하지 않으면 정상적인 GC 처리 중에 수집됩니다. _db가 선언 된 스 니펫에서 알 수 없습니다. 변수 이름으로, 나는 클래스 수준에서 가정합니다. 그렇다면 _db는 선언 된 클래스가 더 이상 참조되지 않은 후에 언젠가 수집되어야합니다. DbCommand는 더 이상 필요하지 않게 될 때 가능한 한 빨리 릴리스하려고하는 개체이므로 "using"문이 적합합니다. –