如何将 SQL Server 更改跟踪与实体框架一起使用



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>();
}

最新更新