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

C# 实体框架无法读取计算列的更改,c#,entity-framework,entity-framework-4.1,C#,Entity Framework,Entity Framework 4.1,我正在使用EntityFramewirk4和SQLServer2008开发一个应用程序,我正在从WCFREST服务调用我的代码。当我使用服务在数据库中添加一条新记录,并且在同一会话中根据该记录查询数据库时,它会返回除可为空的计算列中的信息以外的所有信息,但是如果我在新会话中执行相同的查询,它会返回所有信息 计算列的定义为 [ComputedColumn]作为(日期添加(分钟,[OffsetMinutes],[ActualTimeUTC])) 请告诉我这件事 谢谢 当我使用服务在数据库中添加新记录

我正在使用EntityFramewirk4和SQLServer2008开发一个应用程序,我正在从WCFREST服务调用我的代码。当我使用服务在数据库中添加一条新记录,并且在同一会话中根据该记录查询数据库时,它会返回除可为空的计算列中的信息以外的所有信息,但是如果我在新会话中执行相同的查询,它会返回所有信息

计算列的定义为

[ComputedColumn]作为(日期添加(分钟,[OffsetMinutes],[ActualTimeUTC]))

请告诉我这件事

谢谢

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

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

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

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

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

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

context.Entry(yourEntityToBeReloaded).Reload();

您无法将数据持久化到计算列中-SQL Server内部会按照其名称计算该列。但必须有一种方法将该数据取回,或者我如何在另一个会话中获取相同的数据。因此,“ActualTimeUTC”和“OffsetMinutes”是数据库中的列?是否由EF中的INSERT填充?让我们看看我应该如何在计算列中输入值,您知道“计算”意味着sql server有逻辑/公式来知道应该在该列中输入什么。此外,有时我只需要在computed列中输入ID字段,所以没有其他方法可以做到这一点。您不会在computed列中输入任何值。在值与传递的数据一起更新后,您将让EF从数据库中为您加载它。我期待着相同的结果,但EF没有加载计算列值,并且根据您的回答,EF正在返回对象已知的当前状态。重新加载是我唯一能用的东西,
context.Entry(yourEntityToBeReloaded).Reload();