【问题标题】:EF 4.0 Entity does not pick up new values after insert (select entity after insert)EF 4.0 实体在插入后不拾取新值(插入后选择实体)
【发布时间】:2011-03-27 15:54:02
【问题描述】:

我正在使用 Entity Framework 4.0 POCO 实体 我在插入时映射了自定义存储过程 程序 [dbo].[usp_MyTable_Insert] ( @Value1 字符(1), @Value2 varchar(5), @Value3 varchar(20) …… ) 作为 开始交易 插入“dbo”。“MyTable” ( "价值1", "价值2", “价值3” ) 价值观 ( @值1, @值2, @值3 )

声明@Id int --获取最新ID。 SET @Id = ( SELECT CAST(@@IDENTITY AS INT) )

--用一些值更新表 更新“dbo”。“MyTable” SET Value3 = ( 选择 SomeTableColumn 来自 SomeTable WHERE 某事 = 某事 ) WHERE [Id] = @Id

提交交易

选择 @Id 作为“Id”

结束

将实体插入数据库,然后更新数据库中的某些列 然后返回身份。一切都很简单。

public int InsertRecord(RecEntity recEntity) { context.AddObject("RecEntities", recEntity);

        context.SaveChanges();

        return recEntity.Id;
    } 

方法插入运行良好。 然后我需要用插入的存储过程的值更新当前实体。 我的存储库中有检索数据的方法

public RecEntity SingleRecEntity(Expression> where) { 返回 context.RecEntities.Single(where); } 当我调用此方法时,存储过程插入的值不会出现在实体中。

id = repository.InsertRecord(recEntity); recEntity = repository.SingleBrokerPreRegistration(x => x.Id == id); // 新值不是来自数据库

我在查询分析器中运行实体框架生成的查询,它返回所有最新值。 但由于某种原因,datacontext 不想更新这个实体。

可能应该有一些方法来改变这一点。 可能有人可以解释这种行为。 需要帮助。

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    如果您在集合上运行.Load(Objects.MergeOption.OverwriteChanges),您将获得任何新添加的项目。如果您希望“刷新”已删除的项目,则需要在运行 .Load

    之前从集合中分离实体

    把它们放在一起(对 vb 感到抱歉)

    For Each child in Parent.ChildCollection.ToArray()
        context.Detatch(child)
    Next
    Parent.ChildCollection.Load(Objects.MergeOption.OverwriteChanges)
    

    这对我有用,但如果有更优雅的方式,我很乐意看到它!

    【讨论】:

      【解决方案2】:

      尝试使用 StoreWins 参数的 Refresh 方法。
      如果已经存在指定了实体键的附加对象,EF 不会刷新值,除非未显式调用 Refresh 方法

      【讨论】:

        猜你喜欢
        • 2017-12-08
        • 1970-01-01
        • 1970-01-01
        • 2019-03-26
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        • 2018-04-11
        • 1970-01-01
        相关资源
        最近更新 更多