Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 使用EF插入和更新merge_Entity Framework_Entity Framework 4 - Fatal编程技术网

Entity framework 使用EF插入和更新merge

Entity framework 使用EF插入和更新merge,entity-framework,entity-framework-4,Entity Framework,Entity Framework 4,我正在使用SQLAzure作为存储 我有一个数据集(实体列表),其中既有新记录也有旧记录。我无法确定哪个记录要更新或插入。我需要一种使用EF将整个内容发送到db的方法,使用一些语句来标识如何处理它(意味着更新或插入) 我已经能够使用对象上下文找到merge,但它不符合我的目的 如果有什么不清楚的地方,请询问 这里有几个选项,但在所有选项中,EF都必须知道哪些实体是新的,哪些是旧的 让EF进行更改跟踪。也就是说,从同一上下文实例进行查询和保存。这是显而易见的答案,我不会说太多,因为我假设您的架构

我正在使用SQLAzure作为存储

我有一个数据集(实体列表),其中既有新记录也有旧记录。我无法确定哪个记录要更新或插入。我需要一种使用EF将整个内容发送到db的方法,使用一些语句来标识如何处理它(意味着更新或插入)

我已经能够使用对象上下文找到merge,但它不符合我的目的


如果有什么不清楚的地方,请询问

这里有几个选项,但在所有选项中,EF都必须知道哪些实体是新的,哪些是旧的

  • 让EF进行更改跟踪。也就是说,从同一上下文实例进行查询和保存。这是显而易见的答案,我不会说太多,因为我假设您的架构不允许这样做,或者您不会问这个问题
  • 具有实体的某些特征,可以让您知道它是旧的还是新的。如果您不能使用EF更改跟踪,这是到目前为止最常见的做法。通常,这是使用主键值来完成的——对于新实体,类似于零/负数/null,对于旧实体,其他一切都是这样
  • 查询每个实体的数据库,查看它是否存在

是一个显而易见的解决方案-即循环列表,查询数据库中是否存在每个实体,然后将状态设置为“已修改”或“已添加”-对您来说没有选项?数据非常庞大,是的,这是一个选项,但需要很多时间。这就是我试图避免它的原因。我认为除了遍历列表之外,没有其他方法可以使用EF。唯一的替代方法可能是编写一个存储过程,以获得传递的列表,并直接在数据库中执行更新或插入。