SQL Server具有非常有用的功能,称为更改跟踪,使客户端能够跟踪更新并插入表中的数据。
我想知道,EF 是否支持使用这些使用该函数CHANGETABLE()
查询?否则你知道任何第三方库吗?或者使用 EF 实现它的任何技巧?
您可能首先在数据库中创建 UDF 以封装 CHANGETABLE 访问。 像这样:
create or alter function GetChanges_Employee_Insert(@last_sync_version bigint)
returns table
as
return
SELECT e.*
FROM CHANGETABLE (CHANGES HumanResources.Employee, @last_sync_version) AS c
LEFT OUTER JOIN HumanResources.Employee AS e
ON e.[BusinessEntityID] = c.[BusinessEntityID]
where c.SYS_CHANGE_OPERATION = 'I'
这将创建一个员工形状的结果,您可以将其加载到现有的员工实体中。
始终可以在 EF 中传递原始 TSQL。 但我假设您希望实体以与表或视图相同的方式引用更改表。
虽然我没有个人经验,但理论上这应该仍然有效。
实质上是将实体映射到表值函数。 我相信从 EF 6 开始,您可以像添加对存储进程的调用一样添加 TVF,这会创建一个复杂的类型,但您可以使用它。
我看到的问题是 CHANGETABLE(( 是 SQLServer 系统语法,而不是与用户定义或系统定义的表值函数的 1-1 映射,因此您可能必须使用自己的用户定义的 TVF 或存储过程围绕它构建自己的脚手架,然后从 EF 调用它。
using (var ctx = new TestEntities())
{
/* Execute TVF that calls changetable */
/* wrapper for a call to CHANGETABLE() on the server side */
var changes = ctx.GetChangeTable().ToList<Change>();
}