在EntityObject的扩展部分内的Entity Framework SaveChanges

崇高

我扩展了自动生成的部分内容,以更改数据库上一行的状态标志。现在,我已经可以使用它了,但是我需要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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

覆盖Entity Framework 5中的SaveChanges

来自分类Dev

Is it possible to query Entity Framework before calling DbContext.SaveChanges?

来自分类Dev

将 DbContext.SaveChanges 异常记录到 Entity Framework/Entity Framework Core 中的数据库

来自分类Dev

带有单个和多个SaveChanges()调用的Entity Framework(6)事务之间有什么区别

来自分类Dev

我应该在每次更改后一次还是单独调用Entity Framework SaveChanges

来自分类Dev

InvalidOperationException Entity.SaveChanges()。更新ObjectContext时出错

来自分类Dev

savechanges方法中的“ System.Data.Entity.Infrastructure.DbUpdateException”

来自分类Dev

使用部分类扩展Entity Framework 5实体并将其映射到现有的其他实体

来自分类Dev

使用部分类扩展Entity Framework 5实体并将其映射到现有的其他实体

来自分类Dev

在SaveChanges()中返回字典

来自分类Dev

SaveChanges()上的验证错误

来自分类Dev

覆盖SaveChanges()的最佳方法

来自分类Dev

SaveChanges()上的验证错误

来自分类Dev

EntityFramework LazyLoading SaveChanges错误

来自分类Dev

DbContext SaveChanges不可预测

来自分类Dev

EntityFramework中的SaveChanges与Async

来自分类Dev

SaveChanges Invald吗?

来自分类Dev

我可以在Entity Framework SubQuery中使用扩展方法吗?

来自分类Dev

如何扩展Entity Framework 6.1.3生成的类?

来自分类Dev

.NET Framework 4扩展?

来自分类Dev

使用Entity Framework Core在部分主键上自动递增

来自分类Dev

如何使用Entity Framework返回查询的部分结果和总数?

来自分类Dev

Entity Framework Invalid Column

来自分类Dev

SQL injection with Entity Framework

来自分类Dev

Entity Framework autoincrement key

来自分类Dev

Entity Framework Ambient Transactions

来自分类Dev

Owin with custom ORM framework (not Entity Framework)

来自分类Dev

丢失的 ';' 在MimeMessage savechanges方法中

来自分类Dev

SaveChanges上的DbUpdateException不断抛出

Related 相关文章

  1. 1

    覆盖Entity Framework 5中的SaveChanges

  2. 2

    Is it possible to query Entity Framework before calling DbContext.SaveChanges?

  3. 3

    将 DbContext.SaveChanges 异常记录到 Entity Framework/Entity Framework Core 中的数据库

  4. 4

    带有单个和多个SaveChanges()调用的Entity Framework(6)事务之间有什么区别

  5. 5

    我应该在每次更改后一次还是单独调用Entity Framework SaveChanges

  6. 6

    InvalidOperationException Entity.SaveChanges()。更新ObjectContext时出错

  7. 7

    savechanges方法中的“ System.Data.Entity.Infrastructure.DbUpdateException”

  8. 8

    使用部分类扩展Entity Framework 5实体并将其映射到现有的其他实体

  9. 9

    使用部分类扩展Entity Framework 5实体并将其映射到现有的其他实体

  10. 10

    在SaveChanges()中返回字典

  11. 11

    SaveChanges()上的验证错误

  12. 12

    覆盖SaveChanges()的最佳方法

  13. 13

    SaveChanges()上的验证错误

  14. 14

    EntityFramework LazyLoading SaveChanges错误

  15. 15

    DbContext SaveChanges不可预测

  16. 16

    EntityFramework中的SaveChanges与Async

  17. 17

    SaveChanges Invald吗?

  18. 18

    我可以在Entity Framework SubQuery中使用扩展方法吗?

  19. 19

    如何扩展Entity Framework 6.1.3生成的类?

  20. 20

    .NET Framework 4扩展?

  21. 21

    使用Entity Framework Core在部分主键上自动递增

  22. 22

    如何使用Entity Framework返回查询的部分结果和总数?

  23. 23

    Entity Framework Invalid Column

  24. 24

    SQL injection with Entity Framework

  25. 25

    Entity Framework autoincrement key

  26. 26

    Entity Framework Ambient Transactions

  27. 27

    Owin with custom ORM framework (not Entity Framework)

  28. 28

    丢失的 ';' 在MimeMessage savechanges方法中

  29. 29

    SaveChanges上的DbUpdateException不断抛出

热门标签

归档