首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的Web Api PUT使用Entity Framework6不断写入新的重复记录而不是更新它们?

问题描述: 为什么我的Web Api PUT使用Entity Framework6不断写入新的重复记录而不是更新它们?

回答: 这个问题可能是由于以下几个原因导致的:

  1. 数据库中的主键或唯一约束问题:如果你的实体类中定义的主键或唯一约束与数据库中的不一致,或者没有正确设置主键或唯一约束,那么每次执行更新操作时,EF6会将其视为新的记录而不是更新已有记录。
  2. 数据库上下文的跟踪问题:EF6使用了对象跟踪机制来追踪实体对象的状态变化。如果你在更新实体之前没有正确加载它们,或者在更新后没有将其状态标记为已修改,EF6可能会将其视为新的记录而不是更新已有记录。
  3. 更新操作的逻辑问题:在执行更新操作时,你需要确保传递给PUT方法的实体对象具有正确的主键值,并且在更新之前从数据库中加载了相应的实体对象。否则,EF6可能会将其视为新的记录而不是更新已有记录。

解决这个问题的方法如下:

  1. 确保数据库中的主键或唯一约束与实体类中的定义一致,并正确设置主键或唯一约束。
  2. 在更新实体之前,确保正确加载它们。可以使用DbContext.Set<TEntity>().Find()方法或DbContext.Set<TEntity>().FirstOrDefault()方法来加载实体对象。
  3. 在更新实体后,使用DbContext.Entry(entity).State = EntityState.Modified将实体状态标记为已修改。

另外,如果你使用的是EF6,可以考虑升级到EF Core,它是EF6的下一代版本,具有更好的性能和更多的功能支持。

腾讯云相关产品推荐:

  • 云数据库 TencentDB:提供高性能、可扩展的数据库服务,支持多种数据库引擎,包括MySQL、SQL Server、MongoDB等。详情请参考:云数据库 TencentDB
  • 云服务器 CVM:提供可靠、安全的云服务器,支持多种操作系统和应用场景,适用于各类业务需求。详情请参考:云服务器 CVM
  • 人工智能平台 AI Lab:提供丰富的人工智能服务和开发工具,包括图像识别、语音识别、自然语言处理等,帮助开发者快速构建智能应用。详情请参考:人工智能平台 AI Lab

请注意,以上推荐的产品仅为示例,具体选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET平台系列13 .NET5 统一平台

在 .NET Core 2.0 中,任务扩展到匹配 .NET Framework 中功能。同样,团队专注于发布一些可行产品,不是盲目地推出过多产品。...同样,Entity Framework Core 5.0保留名称“ Core”以避免将其与 Entity Framework5、Entity Framework6 混淆。   ...从技术上讲,它们不属于C#9,因为它没有任何语言语法。请参阅C#源代码生成器示例,以帮助您开始使用此新功能。我们希望在.NET 6.0及更高版本.NET产品中更多地使用源代码生成器。   ...为了亲自尝试新版本,我们中一些人决定更新dotnet / iot存储库,以使用C#9语法并以.NET 5.0为目标。通过采用语法,这些更改导致删除了超过2k行代码。...它使用顶级程序,记录,模式和开关表达式。还对其进行了更新,以利用.NET库中完整可空注释集。我们还更新了.NET IoT文档。

1.2K20

理解HTTP幂等性

为什么Web API如此流行呢?认为很大程度上应归功于简单有效HTTP协议。HTTP协议是一种分布式面向资源网络应用层协议,无论是服务器端提供Web服务,还是客户端消费Web服务都非常简单。...但实际上,幂等性是分布式系统设计中十分重要概念,HTTP分布式本质也决定了它在HTTP中具有重要地位。 分布式事务 vs 幂等设计 为什么需要幂等性呢?...请注意,这里强调是一次和N次具有相同副作用,不是每次GET结果相同。...比较容易混淆是HTTP POST和PUT。POST和PUT区别容易被简单地误认为“POST表示创建资源,PUT表示更新资源”;实际上,二者均可用于创建资源,更为本质差别是在幂等性方面。...两次相同POST请求会在服务器端创建两份资源,它们具有不同URI;所以,POST方法不具备幂等性。PUT所对应URI是要创建或更新资源本身。

1.4K40
  • 理解HTTP幂等性

    无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多SOA或RESTfulWeb API为什么Web API如此流行呢?认为很大程度上应归功于简单有效HTTP协议。...但实际上,幂等性是分布式系统设计中十分重要概念,HTTP分布式本质也决定了它在HTTP中具有重要地位。 分布式事务 vs 幂等设计 为什么需要幂等性呢?...请注意,这里强调是一次和N次具有相同副作用,不是每次GET结果相同。...比较容易混淆是HTTP POST和PUT。POST和PUT区别容易被简单地误认为“POST表示创建资源,PUT表示更新资源”;实际上,二者均可用于创建资源,更为本质差别是在幂等性方面。...两次相同POST请求会在服务器端创建两份资源,它们具有不同URI;所以,POST方法不具备幂等性。PUT所对应URI是要创建或更新资源本身。

    48300

    为什么说要用DDD替代CRUD来设计API

    来自亚马逊高级工程师 James Hood 以简单明了例子说明了为什么要用 DDD 替代 CRUD 来设计 REST API。...对于银行 API 来说,账户就是一个领域对象(DDD 里实体)。这次我们不再使用 CRUD 来为账户建模,而是为账户定义一组业务操作。以下是一系列写入操作: 开户(Open)——新开一个账户。...而对于客户端来说,它们能执行或不能执行哪些操作也是一目了然。如果 API 具有良好文档化,比如使用了 Swagger,那么就可以很清楚地了解到 API 都具有哪些约束。...总是建议人们在前期多花一点时间,因为有些东西到了后面就很难修改, API 就是一个很好例子。 所以,在进行 API(REST 或其他)设计时,请停止使用 CRUD 模型。...相反,可以通过 DDD 来定义 API,包括领域对象和它们业务操作。 如果你想看到更多关于领域对象例子,可以参考 Amazon Web Services API

    1.5K20

    在 ASP.NET Core Web API 中处理 Patch 请求

    一、概述 PUT 和 PATCH 方法用于更新现有资源。它们之间区别是,PUT 会替换整个资源, PATCH 仅指定更改。...在 ASP.NET Core Web API 中,由于 C# 是一种静态语言(dynamic 在此不表),当我们定义了一个类型用于接收 HTTP Patch 请求参数时候,在 Action 中无法直接从实例中得知客户端提供了哪些参数...Gender = "可能会被改变", }; // 如果客户端只输入 Name 字段,entity Age 和 Gender 将不能被正确映射或被置为 null。...使用 ModelBinderFractory 创建 ModelBinder 不是 ModelBinderProvider 以便于未来支持更多输入格式。 // 3....API 中处理 JSON Patch 请求 https://learn.microsoft.com/zh-cn/aspnet/core/web-api/jsonpatch?

    22340

    Apache Hudi 元数据字段揭秘

    如果想知道记录键对不可变数据不是很有帮助,让我们举个例子。考虑这样一个场景,数据不断添加到表中,同时需要回填来修复过去数据质量问题或推出新业务逻辑。...但是使用记录键,用户可以识别和回填单个记录,不是在较粗略分区级别处理它。...当结合 Hudi 并发控制机制和对排序字段支持时,正常和回填写入端可以无缝写入表,不必担心回填写入端覆盖正常写入,这可以使表恢复到旧状态。...请注意即使使用严格序列化事务,这些事情也可能发生在数据上。 需要具体化记录键 现在已经确定我们需要记录键,让我们了解为什么它们还需要以持久形式与实际记录一起存储,即使 Hudi 支持虚拟键。...它们有助于调试并防止由于潜在数据质量问题导致管道清理噩梦。如果使用像 Delta 或 Iceberg 这样没有这些元字段表格格式,那么其中许多好处并不容易实现。

    57620

    Spring Boot快速开发REST服务实践

    是一种架构风格,设计风格不是标准,可用于设计Web服务,可以从各种客户端使用....基于REST基本设计,其是根据一组动词来控制操作 创建操作:应使用HTTP POST 查询操作:应使用HTTP GET 更新操作:应使用HTTP PUT 删除操作:应使用HTTP DELETE 作为...HTTP PUT请求/user/api/65 来更新用户信息 URL:http://localhost:8080/user/api/65 ?...,相信你已经对REST有了大致掌握,时今当下前端Client层出不穷,后端接口或许来自不同平台,这时候需要请求一批接口,RESTful风格api,使人从请求方式和地址一看就知道是要做什么操作,根据返回...简单通俗说就是多次请求返回效果都是相同,例如GET去请求一个资源,无论请求多少次,都不会对数据造成创建修改等操作,PUT用来更新数据也是,无论执行多次都是最终一样效果 问题:使用PUT改变学生年龄并且这样做

    81830

    JavaScript IndexedDB 完整指南

    IndexedDB 用于在浏览器中存储数据,对于需要离线工作 web 应用程序(如大多数进步 web 应用程序)尤其重要。 首先,让我们介绍一下为什么需要将数据存储在 web 浏览器中。...数据在 web 应用程序中无处不在 —— 用户交互创建数据、查找数据、更新数据和删除数据。如果没有存储这些数据方法,就不可能允许用户交互跨多个 web 应用程序使用保持状态。...这在不断发展 web 应用程序中尤为重要,这些应用程序复制了原生应用程序感觉,但却位于浏览器中。这些渐进 web 应用程序必须离线工作,因此需要一个存储选项。...LocalStorage 存储数据,直到删除为止, sessionStorage 将在浏览器关闭时清除自己。除此之外,它们 API 是相同。...) put:用给定 id 插入或更新一个记录(如果已经存在就会更新) get:用特定 id 获取记录 getAll:从 store 中获取所有记录 count:返回 store 中记录数 createIndex

    1.9K20

    Apache Solr DataImportHandler 远程代码执行漏洞(CVE-2019-0193) 分析

    document,然后对document进行分析(对各字段分词),得到一些索引目录写入索引库,document本身也会被写入一个文档信息库 (2) 索引数据查询 根据关键词解析(queryParser...通过web页面创建core 一开始以为从web页面无法创建core,虽然有一个Add Core,但是点击创建core目录为空无法使用,提示无法找到配置文件,必须在solr目录下创建好对应core,在...然后尝试了使用绝对路径配置,绝对路径也能在web界面看到,但是solr默认不允许使用除了创建core目录之外配置文件,如果这个开关设为了true,就能使用对应core外部配置文件: ? ?...没有conf目录,它配置是相当于链接到configSet模板不是使用copy模板方式: ?...一开始不知道为什么put到name不行,后来看到在第三阶段PoC,又回过头去查资料才意识到dataConfig与schema是配合使用

    2.2K20

    2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务

    REST 已迅速成为在 Web 上构建 Web 服务事实标准,因为它们易于构建且易于使用。...关于 REST 如何适应微服务世界还有一个更大讨论,但是——对于本教程——让我们看看构建 RESTful 服务。为什么是 REST?REST 包含 Web 规则,包括其架构、优势和其他一切。...Web 及其核心协议 HTTP 提供了一系列功能:合适行动 ( GET, POST, PUT, DELETE, ...)缓存重定向和转发安全性(加密和身份验证)这些都是构建弹性服务关键因素。...但这还不是全部。网络是由许多微小规范构成,因此它能够轻松发展,不会陷入“标准战争”泥潭。开发人员能够利用 3rd 方工具包来实现这些不同规范,并立即让客户端和服务器技术触手可及。...通过在 HTTP 之上构建,REST API 提供了构建方法:向后兼容 API可演进 API可扩展服务安全服务一系列无状态服务到有状态服务重要是要意识到,无论多么普遍,REST本身并不是一种标准

    61730

    入门:添加一个支持获取单一资源以及支持POST,PUT和DELETE方法

    这个入门文章主要演示在ASP.NET MVC3网站宿主,主要演示如何在一个Web API上允许更新: 如何检索一个特定项资源 如何在API上启用HTTP POST, PUT和DELETE方法 如何通过...HTML表单发送一个POST到API 这篇入门文章场景是允许客户端添加、删除和更新系统联系人。...如果你请求API是http://localhost:9000/api/contacts/1 ID将被设置为1,Web API支持将模板参数自动转换为原生类型int。...4、以Json格式发送数据 Web Api允许以多个格式发送内容,下面是使用fiddler发送jsonPOST 运行项目 启动Fiddler并切换到“Request Builder” 选择“POST...被返回 7、添加PUT支持 添加对PUT和DELETE支持是非常容易,像POST一样也是使用WebInvoke 制定PUT和DELETE 打开ConactApi.cs把以下代码拷进去 [WebInvoke

    1.4K70

    【RESTful】RESTful API 接口设计规范 | 示例

    RESTful API 在请求方法、资源、地址都进行了规范,其最大限度利用了HTTP最初应用协议设计理念。...使用RESTful 设计RESTful API 资源路径(URI):RESTful核心是面向资源,如何规划资源路径很重要 HTTP动词(请求方式):如get,post,delete,put...一般而言,API名词应该使用复数。例如,使用users反映用户资源URI,不是使用user。...GET : 从服务器去除资源 POST :在服务器新建一个资源 PUT:在服务器更新资源(客户端提供改变后完整资源,服务端返回完整更新字段) PATCH:在服务器更新资源(客户端提供改变属性,服务端返回只发生了更新字段...) DELETE:从服务器删除资源 例如: POST/zoos : 新建一个动物园 GET/zoos/ID : 获取某个指定动物园信息 PUT/zoos/ID : 更新某个指定动物园信息 DELETE

    1.6K20

    DjangoRestFramework,restful规范、APIview、解析器组件、Postman等

    PUT(UPDATE):在服务器更新资源(客户端提供改变后完整资源)。 PATCH(UPDATE):在服务器更新资源(客户端提供改变属性,更新部分资源意思)。...PUT不是POST。       ...比如,/articles这个 URL 就是正确下面的 URL 不是名词,所以都是错误。...不是一个变量,而是一个属性方法,还记得属性方法吗 return HttpResponse('POST')   源码看着比较复杂,这里就不列举了,反正你要知道是,我们解析器查找使用顺序是...四 Postman使用 Postman是一个模拟发送请求并获得响应结果工具,不用这个工具时候,我们写web项目,调试接口返回数据时候,是不是都要启动项目,通过浏览器访问,然后查看数据啊,有了这个工具我们就可以不用启动浏览器来

    2.5K20

    ElastricSearch第三弹之存储原理

    旧数据只能等到段更新时才能被移除,这样会造成大量空间浪费。 若有一条数据频繁更新,每次更新都是新增标记旧,则会有大量空间浪费。 每次新增数据时都需要新增一个段来存储数据。...这就是为什么我们说 ES 是近实时搜索,因为文档变化并不是立即对搜索可见,但会在一秒之内变为可见。这就会存在一个问题:当你索引了一个文档然后尝试搜索它,但却没有搜到。...尽管刷新是比提交轻量很多操作,它还是会有性能开销,并不是所有的情况都需要每秒刷新:当你使用 ES 索引大量日志文件时,你可能想优化索引速度不是近实时搜索,这时可以在创建索引时在 Settings...在生产环境中,当你正在建立一个大索引时,可以先关闭自动刷新,待开始使用该索引时,再把它们调回来。 ” 段合并 由于自动刷新流程每秒会创建一个段,这样会导致短时间内段数量暴增。...在特定情况下,使用 optimize API 颇有益处。例如在日志这种用例下,每天、每周、每月日志被存储在一个索引中,老索引实质上是只读它们也并不太可能会发生变化。

    35930

    ElastricSearch第三弹之存储原理(详细+易懂)

    旧数据只能等到段更新时才能被移除,这样会造成大量空间浪费。 若有一条数据频繁更新,每次更新都是新增标记旧,则会有大量空间浪费。 每次新增数据时都需要新增一个段来存储数据。...这就是为什么我们说 ES 是近实时搜索,因为文档变化并不是立即对搜索可见,但会在一秒之内变为可见。这就会存在一个问题:当你索引了一个文档然后尝试搜索它,但却没有搜到。...尽管刷新是比提交轻量很多操作,它还是会有性能开销,并不是所有的情况都需要每秒刷新:当你使用 ES 索引大量日志文件时,你可能想优化索引速度不是近实时搜索,这时可以在创建索引时在 Settings...在生产环境中,当你正在建立一个大索引时,可以先关闭自动刷新,待开始使用该索引时,再把它们调回来。 段合并 由于自动刷新流程每秒会创建一个段,这样会导致短时间内段数量暴增。...在特定情况下,使用 optimize API 颇有益处。例如在日志这种用例下,每天、每周、每月日志被存储在一个索引中,老索引实质上是只读它们也并不太可能会发生变化。

    25630
    领券