以下のコード行を使用していて、エラーが発生しています:
usingステートメントで使用されるタイプは、暗黙的にSystem.IDisposableに変換可能である必要があります
このエラーを根絶するにはどうすればよいですか?これはコード行です:
using (var db = new HealthTrackerContext())
以下のコード行を使用していて、エラーが発生しています:
usingステートメントで使用されるタイプは、暗黙的にSystem.IDisposableに変換可能である必要があります
このエラーを根絶するにはどうすればよいですか?これはコード行です:
using (var db = new HealthTrackerContext())
HealthTrackerContext
を実装しない場合、IDisposable
このエラーが発生します。あなたのクラスはそうではないと思います。したがって、この状況を改善するには、オブジェクトに実装するか、ブロックIDisposable
を削除する必要があります。using
ブロックを使用しないことには何の問題もありませんusing
、btw = D
HealthTrackerContextは、IDisposableインターフェイスを実装する必要があります。そのインターフェースを実装すると、エラーは消えます。
このリンクを見てくださいhttp://msdn.microsoft.com/en-us/library/system.idisposable.aspx
HealthTrackerContext
を実装していないことを意味しますIDisposable
。
コピーが簡単でスレッドセーフなパターン:
public partial class HealthTrackerContext: IDisposable {
protected virtual void Dispose(bool disposing) {
lock(thisLock)
if(!disposed) {
if(disposing) {
// release your resource
// and set the referencing variables with null
this.disposed=true;
}
}
}
public void Dispose() {
this.Dispose(true);
GC.SuppressFinalize(this);
}
~HealthTrackerContext() {
this.Dispose(false);
}
object thisLock=new object();
bool disposed;
}
このオブジェクトのIDisposableインターフェイスを次のように実装する必要があります。
public class Disposable : IDisposable
{
private bool isDisposed;
~Disposable()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!isDisposed && disposing)
{
DisposeCore();
}
isDisposed = true;
}
}