c# - CA1001 Visual Studio 2012 代码分析警告。这是什么意思?

标签 c# code-analysis idisposable

它不是那么重要,但我想弄清楚它在告诉我什么,它是否是一个合理的警告?有人可以用简单的术语为我解释这个错误吗?

CA1001 Types that own disposable fields should be disposable

Implement IDisposable on 'MemVoteManager' because it creates members of the following IDisposable types: 'CongressDBEntities'. If 'MemVoteManager' has previously shipped, adding new members that implement IDisposable to this type is considered a breaking change to existing consumers.

    public class MemVoteManager : AbstractDataManager, IMemVoteManager
{
    private CongressDBEntities context = new CongressDBEntities();

    public int AddMemVote(tMemVoteScore mvs)
    {
        //Insert Model
        context.tMemVoteScores.Add(mvs);
        context.SaveChanges();

        int newPK = mvs.MemVoteScoresID;

        //Update funky column ID with PK as well
        var memVoteItem = (from m in context.tMemVoteScores
                           where m.MemVoteScoresID == newPK
                           select m).SingleOrDefault();

        memVoteItem.ID = memVoteItem.MemVoteScoresID;
        context.SaveChanges();
        return newPK;
    }

最佳答案

可以实现IDisposable,这样当消费者使用完您的类时上下文将被释放,但最好不要让上下文成为类。只需在需要时创建它并在完成后处理它:

public int AddMemVote(tMemVoteScore mvs)
{
    //Insert Model
    using(CongressDBEntities context = new CongressDBEntities())
    {
        context.tMemVoteScores.Add(mvs);
        context.SaveChanges();

        int newPK = mvs.MemVoteScoresID;

        //Update funky column ID with PK as well
        var memVoteItem = (from m in context.tMemVoteScores
                           where m.MemVoteScoresID == newPK
                           select m).SingleOrDefault();

        memVoteItem.ID = memVoteItem.MemVoteScoresID;
        context.SaveChanges();
    }
    return newPK;
}

上下文是轻量级的,因此每次创建它们不会造成很大的损失。此外,您不必担心消费者会通知您处理上下文,并且如果类的一个实例被多次使用,您也不会在内存中有很多内置更改。

关于c# - CA1001 Visual Studio 2012 代码分析警告。这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164592/

相关文章:

ant - 如何使用 Ant 生成 Emma 代码覆盖率报告?

c# - 使用 Roslyn CodeAnalyzer 将命名空间添加到类

c# - 使用 DirectShow 从内存渲染

c# - 直接检查是否有任何服务已停止的任何替代方法?

c# - Blazor 绑定(bind)值 :event oninput

javascript - 隐藏和显示表单(面板)onclick

C++代码分析工具

c# - 为什么不处理/关闭 SqlConnection?

android - 谁应该在什么时候处置 Intent ?

c# - IDisposable GC.SuppressFinalize(this) 位置