6

这并不重要,但我想弄清楚它告诉我什么,这是一个合法的警告吗?有人可以简单地为我解释这个错误吗?

CA1001拥有一次性字段的类型应该是一次性的

在“MemVoteManager”上实现 IDisposable,因为它会创建以下 IDisposable 类型的成员:“CongressDBEntities”。如果 'MemVoteManager' 之前已发布,则将实现 IDisposable 的新成员添加到此类型被视为对现有使用者的重大更改。

    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;
    }
4

2 回答 2

7

可以实现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;
}

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

于 2013-03-01T18:55:11.537 回答
4

它让您知道该字段context包含一次性成员。这意味着这些成员需要Dispose()呼吁他们才能进行垃圾收集。因此,它希望您实现接口IDisposableMemVoteManager以便您可以调用Dispose()上下文和/或其一次性成员。

所以修改你的代码:

public class MemVoteManager : AbstractDataManager, IMemVoteManager, IDisposable

然后IDisposable像这样实现接口的成员:

public void Dispose()
{
    // call dispose on the context and any of its members here
}
于 2013-03-01T18:43:21.500 回答