- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做什么
public void SomeTestMethod(){
var person = this.PersonManager.Get(new Guid("someguid"));
person.Lastname = "Jameson";
this.PersonManager.Save(person); // This goes wrong
}
哪里出了问题
上面的保存方法调用这段代码:
protected void Add<T>(T source, MyEntities context, bool isNew) where T : class
{
if (isNew)
{
context.Set<T>().Add(source);
}
else
{
var entry = context.Entry(source);
if (entry.State == EntityState.Detached)
{
context.Set<T>().Attach(source);
entry.State = EntityState.Modified;
}
}
}
var entry = context.Entry(source);
行是导致此错误的行:
The operation cannot be completed because the DbContext has been disposed.
我看过类似问题的答案,建议使用 .ToList()(或其他东西来执行链接),但这种情况已经发生,因为 Get
返回一个 DTO 对象。
一些背景
保存中使用的 PersonManager
,用它来设置 DbContext:
var context = new MyEntities();
this.PersonRepository = repositoryProvider.GetRepositoryByType<PersonRepository>(context);
var context = new MyEntities();
只是让它现在工作,这将被 DI 注入(inject)。
这又取决于:
public T GetRepositoryByType<T>(MyEntities context) where T : IContextDependent
{
var instance = this.Repositories.SingleOrDefault(x => x is T);
instance.SetContext(context);
return (T)instance;
}
因为使用了相同的 PersonManager
,所以实际上使用了相同的 PersonRepository
(结果是相同的上下文),所以我不明白为什么它会在第二次调用时被处理掉。
最佳答案
您没有给出创建上下文的上下文,但我假设它在方法中,也许是构造函数中。您的上下文仅限于该方法,因此 GC 可以在方法调用结束时自由处理它。我认为它完全有效(即使只有一次)的事实是您设法在它被垃圾收集之前击中它。
具有讽刺意味的是,您的问题的发生是因为您还没有使用 DI。简单地注入(inject)它就足以解决问题。至少,您的上下文的范围应该与 PersonManager
相同。
关于c# - 第二次调用同一个 DbContext 导致错误 'DbContext has been disposed',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34289369/
我的代码遇到了很大的困难。我正在开发一个显示歌词和和弦的应用程序。我使用两个重叠的textview分隔了和弦和歌词。 我在这个项目中遇到的问题是音高改变功能。我尽我所能向我解释得更好: 和弦总数为12
我有一个游戏并使用 Tune 作为分析库。使用最新的 Unity (5.3.4f1) 并通过 Unity 获取 apk(无 eclipse/android studio)。 我的游戏在 Play 商店
我是一名优秀的程序员,十分优秀!