插入后EF 4.0实体不会拾取新值(插入后选择实体)

时间:2010-08-10 06:03:30

标签: entity-framework

我正在使用Entity Framework 4.0 POCO实体 我已在插入上映射自定义存储过程 程序[dbo]。[usp_MyTable_Insert] (     @ Value1 char(1),     @ Value2 varchar(5),     @ Value3 varchar(20)     .... ) 如 开始交易         插入“dbo”。“MyTable”         (             “值1”,             “值2”,             “值3”         )         VALUES         (             @值1,             @值2,             @值3         )

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

- 使用某些值更新表格 更新“dbo”。“MyTable” SET Value3 =(SELECT SomeTableColumn                来自SomeTable                什么东西=某事             ) WHERE [Id] = @Id

COMMIT TRANSACTION

SELECT @Id AS“Id”

END

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

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

        context.SaveChanges();

        return recEntity.Id;
    } 

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

使用StoreWins参数尝试Refresh方法。
除非未明确调用Refresh方法,否则EF不会刷新值,以防已经有指定了Entity Key的附加对象

答案 1 :(得分:0)

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

之前从集合中分离实体

全部放在一起(抱歉vb)

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

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