想要发布这个,即使我在写这个问题的过程中弄清楚了。将在下面发表答案。
使用VS代码分析获得以下警告:
警告CA2213'DBConn'包含IDisposable类型的字段'DBConn.k__BackingField':'SqlConnection'。更改“DBConn”上的Dispose方法,在此字段上调用Dispose或Close。
但我的代码 在DBConn属性上调用Dispose()。它不在支持领域吗?我有这样的其他实例 - 我处理编译器不会抛出此警告的位置。这是下面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace TheProgramSpace
{
public sealed class DBConn : IDisposable
{
// class containing the database and its connection
public SqlConnection TheConn { get; }
public string DbPath { get; }
public string DbName { get; }
public DBConn(ProgInstance FPI)
{
// constructs new SQLConnection
DbPath = FPI.dbPath;
DbName = FPI.dbName;
string connString = "Data Source = " + DbPath + "; Initial Catalog =" + DbName + "; Integrated Security = True; "
+ "Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; "
+ "ApplicationIntent = ReadWrite; MultiSubnetFailover = False";
TheConn = new SqlConnection(connString);
}
public void Dispose()
{
TheConn.Dispose();
}
}
}
答案 0 :(得分:16)
您的代码没有问题。 <{1}} 将在底层支持字段上调用。这是FxCop中的known bug,它引入了C#6中引入的“getter-only”自动属性。现在,您可以suppress the warning在类上具有属性,或者只是忽略直到它在FxCop中修复。
答案 1 :(得分:14)
原因是TheConn
,因为它没有set
访问者,因此是只读的。将属性声明更改为
public SqlConnection TheConn { get; private set; }
解决了这个问题。