6

それはそれほど重要ではありませんが、私はそれが私に何を言っているのかを理解しようとしています、そしてそれは正当な警告ですか?誰かが私のためにこのエラーを簡単な言葉で説明できますか?

使い捨てフィールドを所有するCA1001タイプは使い捨てである必要があります

次のIDisposableタイプのメンバーを作成するため、「MemVoteManager」に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;
}

コンテキストは軽量であるため、毎回作成しても大きなペナルティはありません。さらに、コンテキストを破棄するようにコンシューマーから通知されることを心配する必要はありません。また、クラスの1つのインスタンスが何度も使用されても、メモリに多くの変更が蓄積されることはありません。

于 2013-03-01T18:55:11.537 に答える
4

フィールドcontextに使い捨てメンバーが含まれていることをお知らせします。つまりDispose()、ガベージコレクションを実行できるように、これらのメンバーはそれらを呼び出す必要があります。したがって、使い捨てのコンテキストやそのメンバーを呼び出すことができるように、インターフェイスを実装するIDisposable必要があります。MemVoteManagerDispose()

したがって、コードをそのように変更します。

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 に答える