[英]Compare List to Database records, if exists - update, if new - create (EF Core)
[英]How to update database with new & modified records?
我已经创建了一个database
(从XML
读取和填充数据)。 我已经使用SqlBulkCopy
做到了这一点。 但是场景是每当XML更新时(可能是插入新记录或修改现有记录) ...因此数据库也应更新 ,因此,我创建了一个解决方案,首先应该对所有表的所有记录进行更新 。在数据库中删除并再次执行SqlBulkCopy
,以便可以更新数据……
但这似乎是最糟糕的方式。
有什么方法可以只更新那些记录,如果源XML
有任何新记录,则需要更新这些记录并插入新记录?
我也尝试了一些数据集合并操作,但是我找不到正确的使用方法。
尝试这个:
将xml序列化为类对象-您可以将其添加为该类对象的集合,即List<object>
。 然后,通过C#存储过程调用传递xml的唯一ID(现已序列化记录)。 您可以遍历集合并使用存储过程匹配每个id。 如果xml中的记录不是太多,这可能会降低性能。
在存储过程中,执行IF SELECT Count(*)... > 0
。 如果返回的值大于0,则记录存在:
IF(SELECT COUNT(*) FROM table where uniqueid = @id) > 0)
BEGIN
UPDATE table ... WHERE uniqueid = @id
END
ELSE
BEGIN
INSERT INTO table (...) VALUES(...)
END
或者使用也很有用的MERGE INTO
。
让存储过程返回一个值或布尔值以指示数据库已成功更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.