实体框架SQL查询字符串,用于从时态表中获取历史数据,从而导致数据表不兼容错误

时间:2017-12-11 16:24:32

标签: c# sql-server entity-framework temporal-tables

我在this问题中解释了同样的问题。

Matt在同一篇文章中找到了一个很好的答案,这对我帮助很大。它适用于插入和更新查询。我使用了IDbCommandTreeInterceptor和Ignored ValidFrom和ValidTo列。

现在我试图查询一些历史数据。由于实体框架Linq查询无法从时态表中获取数据,因此我被迫使用SQL查询字符串。

var result = this.Context.VehicleSets.SqlQuery("SELECT Id, Name FROM T.VehicleSet FOR SYSTEM_TIME ALL WHERE Id = 1").ToList();

此行在运行时抛出错误。

The data reader is incompatible with the specified 'Model.VehicleSet'. A member of the type, 'ValidFrom', does not have a corresponding column in the data reader with the same name.

Matt在他的回答中为插入和更新命令设置了子句。 我尝试使用DbQueryCommandTree为查询设置相同的子句,但DbQueryCommandTree没有SetClauses命令。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在SQL“选择”查询中,您需要包括VehicleSets类中的所有字段...“ ID”和“名称”字段中的appart,您至少需要有一个开始日期和结束日期(保存时态数据...)。

*(我知道这是一个较晚的答复,但可能会对其他人有所帮助)*