这不重要,但我想知道它告诉我什么,这是一个合理的警告吗?有人可以用简单的术语解释这个错误吗?
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;
}
答案 0 :(得分: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 :(得分:3)
让您知道字段context
包含一次性成员。这意味着那些成员需要Dispose()
调用它们才能发生垃圾收集。因此,它希望您在IDisposable
上实现接口MemVoteManager
,以便您可以在上下文和/或其一次性成员上调用Dispose()
。
所以修改你的代码:
public class MemVoteManager : AbstractDataManager, IMemVoteManager, IDisposable
然后实现IDisposable
接口的成员,如下所示:
public void Dispose()
{
// call dispose on the context and any of its members here
}