我扩展了自动生成的部分内容,以更改数据库上一行的状态标志。现在,我已经可以使用它了,但是我需要db.SaveChanges()
从局部调用。有没有一种方法可以使我从局部对象中获取当前的Entities上下文,以使其立即保存更改?
public partial interface IMyEntityStatusChange
{
void ChangeStatus(MyEntityStatusCode code);
}
public partial class MyEntity : IMyEntityStatusChange
{
public void ChangeStatus(MyEntityStatusCode code)
{
StatusCode = (int)code;
//Now I want to Save it to the db
}
}
现在我必须做这样的事情:
using(var db = new EFEntities())
{
db.MyEntities.FirstorDefault().ChangeStatus(MyEntityStatusCode.Failed);
db.SaveChanges();
}
谢谢!
它将打破实体框架的对持久性无知的范例,但除此之外,如果您坚持的话,可能会这样做。
首先,您需要扩展您的界面:
internal interface IMyEntityStatusChange
{
DbContext Context { get; set; }
void ChangeStatus(MyEntityStatusCode code);
}
然后在您的上下文的构造函数中(假设是DbContext
):
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized +=
Context_ObjectMaterialized;
和方法:
void Context_ObjectMaterialized(object sender, ObjectMaterializedEventArgs e)
{
var contextAwareEntity = e.Entity as IMyEntityStatusChange;
if (contextAwareEntity != null)
{
contextAwareEntity.Context = this;
}
}
(要求using System.Data.Entity.Core.Objects;
)
注意事项很多:
ChangeStatus
方法。ChangeStatus
成功。还是在没有的时候抛出异常?两种方法都不好。IMyEntityStatusChange
仍处于活动状态,就不会垃圾收集已处置的上下文。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句