私はSqlConnection
を使用してデータアクセスを実行するクラスを持っています。私たちは皆知っているようにIDisposableを実装しています。これはfinallyブロックまたはusingステートメントで処理する必要があります。私はブロックを使用してそれらを持っているが、私のIDisposable
は実際に別の機能で作成されます。このように:このIDisposableは、適切に処分されている関数から返されますか?
public class DataRepository
{
private readonly SqlConfiguration _configuration;
public DataRepository(SqlConfiguration configuration)
{
_configuration = configuration;
}
public void Save(Model someModel)
{
using(var connection = CreateSqlConnection())
{
// Use connection here
}
}
public Model Get(int id)
{
using(var connection = CreateSqlConnection())
{
// Use connection here
}
}
private SqlConnection CreateSqlConnection()
=> new SqlConnection(_configuration.ConnectionString);
}
あなたが見ることができるように、私はすべての私のSqlConnection
年代の取り扱いステートメントを使用して持っています。 CreateSqlConnection
がusingステートメントの外で呼び出される場所はありません。しかし、私はコードクラッカーロスリンアナライザを使用していますし、それは私のCreateSqlConnection
ことに私にCC0022警告を与えている:
SqlConnectionオブジェクトを配置する必要があります。
私はSqlConnection
が処分されていることを適切に確認しましたか?この場合、コードアナライザは間違っていますか?
はい、その中であればブロックを使用すると、それは廃棄されます。 – Igor
'CreateSqlConnection'の名前を' GetSqlConnection'に変更してみましょう。私は特定のルールは、あなたのメソッドの名前についても細心の注意を払っていると思います。 –
は私によく見えます。私はroslynアナライザは、それが処分されないための "可能性"を見ていると想定しています。それは、何かが呼び出せるメソッドにあり、 "CreateSqlConnection"内で処分されないためです。あなたがしたことで私は安全に見えます。 – Skintkingle