实体框架无法读取计算列的更改

本文关键字:计算 读取 框架 实体 | 更新日期: 2023-09-27 18:27:47

我正在开发一个使用Entity Framewirk 4和SQL server 2008的应用程序,我正在从WCF Rest服务调用我的代码。当我使用该服务在数据库中添加一条新记录,并在同一会话中针对该记录查询数据库时,它会向我返回除可为null的计算列中的信息之外的所有信息,但如果我在新会话中执行相同的查询,它会返回所有信息。

计算列的定义为

[ComputedColumn]AS(dateadd(分钟,[OffsetMinutes],[ActualTimeUTC])

请告诉我这方面的情况。

感谢

实体框架无法读取计算列的更改

当我使用服务在数据库中添加新记录时

若您这样做,它应该已经在当前实体实例中为您填充了计算数据。您只需要先在代码中标记列为计算列:

modelBuilder.Entity<YourEntity>()
            .Propety(e => e.YourComputedProperty)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);

或数据注释

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

或通过StoreGeneratedPattern 在EDMX中

在针对该记录查询数据库的同一会话中,它会向我返回除可为null的计算列中的信息之外的所有信息

由于标识映射,它会返回上下文已知的当前状态。EF不会真正再次从数据库加载数据(即使它执行查询),除非您强制它这样做。默认情况下,它使用已经存储在上下文中的数据,即您插入的数据。

要强制重新加载,您可以执行以下操作:

context.Entry(yourEntityToBeReloaded).Reload();