【问题标题】:Linq to Entities: add an object without save changesLinq to Entities:添加对象而不保存更改
【发布时间】:2011-08-30 09:55:05
【问题描述】:

假设我有以下代码:

TEModule teModule = Context.TEModules.Where(module => module.EnumValue.Equals(text.ModuleName)).FirstOrDefault();
if (teModule == null)
{
     teModule = new TEModule();
     teModule.EnumValue = text.ModuleName;
     Context.TEModules.AddObject(teModule);
     //Context.SaveChanges();
     TEModule aux = Context.TEModules.Where(module => module.EnumValue.Equals(teModule.ModuleName)).FirstOrDefault();
}

我的问题是,如果我保留“SaveChanges”注释,那么在下一个查询中,辅助对象始终为空,因为 Context.TEModules 为空,即使我调用“AddObject”方法。 但是,如果我在 AddObject 之后调用 SaveChanges,那么在下一个查询中,辅助对象不为空。问题是我不想如此频繁地调用 SaveChanges,因为这不是我添加对象的唯一一段代码,如果这样做,性能会下降。

所以问题是:我是否必须在每次调用 AddObject 后调用 SaveChanges,如果以后我需要知道对象是否已经存在?

【问题讨论】:

    标签: entity-framework linq-to-entities add savechanges


    【解决方案1】:

    linq-to-entities 查询的目的是执行,并且执行是在数据库中执行的,因此如果您没有保存实体,则它的数据库表示不存在。

    如果您需要查找本地存储的实体(尚未持久化),则必须改为查询 ObjectStateManager

    var entity = Context.ObjectStateManager.GetObjectStateEntries(EntitiState.Added)
                                           .Where(e => !e.IsRelationship)
                                           .Select(e => e.Entity)
                                           .OfType<TEModule>()
                                           .FirstOrDefault(m => m.EnumValue.Equals(teModule.ModuleName));
    

    【讨论】:

    • 那么修改后的对象呢?假设我搜索“Enumvalue”字段,它从数据库中返回一个对象。我修改了 EnumValue,后来我进行了搜索以找到修改后的对象。如果 SaveChanges 没有被调用,它会再次返回 null 吗?这没有任何意义,因为这样我每次修改、插入或删除任何对象时都必须调用 SaveChanges...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多