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

EF核心-保存更改不会添加新记录

基础概念

Entity Framework Core(EF Core)是.NET Core平台上的一个开源对象关系映射(ORM)框架。它允许开发者使用C#或VB.NET等.NET语言来操作数据库,而不需要编写大量的SQL代码。EF Core提供了丰富的API来管理数据库上下文、实体和它们之间的关系。

相关优势

  1. 跨平台支持:EF Core支持多种数据库系统,包括SQL Server、SQLite、MySQL、PostgreSQL等。
  2. 轻量级:相比Entity Framework 6,EF Core更加轻量级,性能更好。
  3. 灵活的配置:EF Core提供了灵活的配置选项,允许开发者根据需求定制数据库连接和实体映射。
  4. 迁移支持:EF Core支持数据库迁移,方便开发者管理数据库结构的变更。

类型

EF Core主要分为两种类型:

  1. Database First:从现有数据库生成模型。
  2. Code First:从代码生成数据库。

应用场景

EF Core广泛应用于各种需要与数据库交互的应用程序,包括Web应用、桌面应用、移动应用等。

问题描述

在使用EF Core时,可能会遇到保存更改不会添加新记录的问题。

原因

  1. 实体未正确配置:确保实体类上使用了[Entity]属性,并且实体类有一个无参构造函数。
  2. 数据库上下文未正确配置:确保在Startup.cs或相应的配置文件中正确配置了数据库上下文。
  3. 实体未正确跟踪:确保实体在添加到数据库上下文之前没有被跟踪。
  4. 数据库连接字符串错误:确保数据库连接字符串正确无误。

解决方法

以下是一个简单的示例,展示如何正确配置EF Core并添加新记录:

实体类

代码语言:txt
复制
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

数据库上下文

代码语言:txt
复制
public class ApplicationDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("YourConnectionStringHere");
    }
}

添加新记录

代码语言:txt
复制
public void AddProduct(string name, decimal price)
{
    using (var context = new ApplicationDbContext())
    {
        var product = new Product { Name = name, Price = price };
        context.Products.Add(product);
        context.SaveChanges();
    }
}

参考链接

通过以上步骤,可以确保EF Core能够正确地添加新记录到数据库中。如果问题仍然存在,请检查日志和异常信息,以便进一步诊断问题。

相关搜索:EF核心保存更改不适用于删除.NET核心5.0 EF迁移添加新的外部列.Net核心EF,将记录保存到多对多类型表保存R JSON对象,并为每条记录添加新行实体框架核心SaveChangesAsync不会将新记录更新到数据库在EF对象上迭代以在保存更改之前仅看到“新值”c#剃刀页面,EF核心,如何通过代码生成和添加子记录到尚未使用添加的父记录比较列表与数据库记录,如果存在-更新,如果是新的-创建(EF核心)EF Core 2.2 -无法添加链接到已存在的另一个记录的新记录ExtJS6:添加的新记录不会显示在列表存储中.NET核心/ EF.Core 3+将控制台日志记录添加到DbContextFlutter -添加新小部件时,列中的StatefulWidgets不会更改SaveChanges上的EF核心不断向第二个表添加一条记录当在mounted中添加的新变量发生更改时,视图不会更新EF核心-为什么实体被保存为新的数据库实体,而它们应该是外键关系?EF核心更新循环中的实体和子实体-保存更改,在第一次传递时提交整个列表从数据库更新模型不会在没有主键的情况下添加新表(EF6)如何在添加新列R闪亮的反应式数据表之前保存更改哈希历史记录无法推送相同的路径;当我更改状态而不是路径名时,新条目将不会添加到历史记录堆栈中如何在更新操作中与实体框架核心同步一对多关系的记录?不是添加新实体,而是同步
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于Entity Framework 6的框架Nido Framework

您不仅能通过会议记录、签入和可下载夜间生成了解团队所做的工作,还可以向 EF6 提供源代码(但是要在 EF 团队的完全监督之下)。 请记住 EF6 是演变而不是革命。...尽管 EF6 是在 ORM 基础上发展而来的,但是并没有改变它根本的工作方式。 如果您已经投入时间学习 EF,那么这种投入将不会白费。...EF6 在某些方面变化还是比较大的,但是这些变化仅限于部分命名空间的变化,如果您有准备的话会很容易处理。 EF6 的功能分为以下几类: 免费提供的功能:这些功能属于核心功能的一部分。...对于 EF6 而言,将设计器作为扩展功能具有相当大的好处。 以后团队将能够直接向设计器添加功能,包括 Entity Framework Power Tools 中当前提供的功能。...EF6 中有许多这样的功能:支持异步查询和保存、返回自定义 Code First 约定、利用的 DbConfiguration 类型提高可扩展性(依赖于较低级别的 EF6 IDbDependency

1.7K60

【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问

EF Core 与传统的 Entity Framework (EF) 相比,具有以下特点: 更轻量级: EF Core 比 EF 更为轻量,只包含了最核心的 ORM 功能,减少了不必要的依赖。...迁移支持: 提供程序需要支持 EF Core 的数据迁移功能,允许开发人员在数据库模式更改时创建迁移。 性能优化: 提供程序通常会针对特定数据库引擎进行优化,以提高数据访问性能。...数据迁移涉及以下几个关键概念: 迁移:迁移是数据库架构变更的记录。每次你修改数据模型并保存这些变更时,EF Core 都会创建一个的迁移。...下面是如何使用 EF Core 数据迁移的步骤: 添加迁移:使用 Add-Migration 命令添加的迁移记录。这个命令会创建一个的迁移类,并将其添加到迁移历史记录中。...延迟加载(Lazy Loading):默认情况下,EF Core 不会自动加载实体之间的导航属性。开启延迟加载功能可以提高性能,但可能会导致额外的数据库查询。

45200
  • Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)

    也是EF上下文中非常重要的一个属性。它帮我们把添加的实体放到添加队列里,把修改的实体放到修改的队列里,当然还有删除等的。...Added 对象为对象,并且已添加到对象上下文,但尚未调用 SaveChanges 方法。 在保存更改后,对象状态将更改为 Unchanged。...在保存更改后,对象状态将更改为 Detached。 Modified 对象上的一个标量属性已更改,但尚未调用 SaveChanges 方法。...在不带更改跟踪代理的 POCO 实体中,调用 DetectChanges 方法时,已修改属性的状态将更改为 Modified。 在保存更改后,对象状态将更改为 Unchanged。...而且EF自动帮我们做了缓存的处理,当我们第一次查询某个实体时它会自动帮我们从数据库取出数据,并装配成实体类交给我们开发人员,当第二次获取相同数据时,它会先从缓存中查找,如果已经存在数据了就立即返回,不会查询数据库

    79830

    UnitOfWork知多少

    UOW模式的作用是在业务用例的操作中跟踪对象的所有更改(增加、删除和更新),并将所有更改的对象保存在其维护的列表中。在业务用例的终点,通过事务,一次性提交所有更改,以确保数据的完整性和有效性。...UOW的本质 通过以上的介绍,我们可以总结出实现UOW的几个要点: UOW跟踪变化 UOW维护了一个变更列表 UOW将跟踪到的已变更的对象保存到变更列表中 UOW借助事务一次性提交变更列表中的所有更改...EF中的UOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体的变化。当调用SaveChanges时,所有的更改将通过事务一次性提交到数据库。...该测试用例中我们添加了一个User,并为User创建对应的Customer,同时为Customer添加一条Address。...一不做二不休,我们再对其进行一层抽象,抽离保存接口,这也就是Uow的核心接口方法。 我们抽离SaveChanges方法,定义IUnitOfWork接口。

    2.4K81

    asp.net core 系列之并发冲突

    , 2.在 Jane 单击“保存”之前,John 访问了相同页面,并将开始日期字段从 2007/1/9 更改为 2013/1/9。...(在第一个用户保存之前,第二个用户把时间从07年改为13年,注意此时第二个用户看到的金额还不是0) ? 3.Jane 先单击“保存”,并在浏览器显示索引页时看到她的更改。...但是,这种方法,也有一些问题: 当对同一个属性进行竞争性更改的话,无法避免数据丢失 通常不适用于web应用。它需要维持重要状态,以便跟踪所有提取值和值。 维持大量状态可能影响应 用性能。...并且可以 显示错误消息 显示数据的当前状态 允许用户重新应用更改。 处理并发 当属性配置为并发令牌时: EF Core 验证提取属性后是否未更改属性。...在没有行更新的情况下,EF Core 引发 DbUpdateConcurrencyException 此文主要是为了方便自己记录学习,如有错误,欢迎指正 这里附上参考资料: https://docs.microsoft.com

    1.6K20

    .NET 9 预览版 3 发布

    TimeSpan.From 重载 .NET 9 预览版 3 为 TimeSpan.From 方法引入了的重载,在处理时间间隔时提供了额外的灵活性和便利性。 TimeSpan.From 重载 2....终端记录器可用性 对终端记录器进行了可用性增强,改进了开发人员在 .NET 应用程序中使用日志记录时的体验。...终端记录器可用性 有关这些新功能和其他更新的更详细概述,请参阅以下发行说明: .NET 库发行说明 .NET 运行时发行说明 .NET SDK 发行说明.NET SDK Release Notes 除了核心....NET 组件外,还有特定领域的更新: .NET 数据和 EF Core .NET MAUI ASP.NET 核心 开始使用 若要开始使用 .NET 9,请安装 .NET 9 SDK。...有关 .NET 9 中任何重大更改的信息,以及所有预览版的发行说明和讨论的完整列表,请参阅发布索引线程。

    15910

    浅析Entity Framework Core中的并发处理

    如果一个属性被配置为并发令牌,则EF将在保存这条记录时,会检查没有其他用户修改过数据库中的这个属性的值。...EF使用了乐观并发策略,这意味着它将假定值没有改变,并尝试保存数据,但如果发现值已更改,则抛出异常。 举个例子,我们有一个用户类(User),我们配置 User中的 Name为并发令牌。...这在应用中一般是可取的,以便我们的应用程序可以提示用户,在保存他们的改变之前,以确保此记录仍然代表同一个姓名的人。...如果数据库中的值已更改,则不会更新任何行。...当我们配置好上面的并发令牌时,在EF执行SaveChanges()操作并产生并发的时候,我们会得到DbUpdateConcurrencyException的异常信息,(注意:在不配置并发令牌时,这个异常一般不会触发

    2.8K90

    如何在 Git 中重置、恢复,返回到以前的状态

    reset 命令(默认)是在链中向后移动分支的指针去“撤销”更改,revert 命令是在链中添加一个的提交去“取消”更改。再次查看图 1 可以非常轻松地看到这种影响。...另一个方法是添加一个的提交去删除第三行,以使最终结束变成两行的版本 —— 实际效果也是取消了那个更改。...使用一个 git revert 命令可以实现上述目的,比如: $ git revert HEAD 因为它添加了一个的提交,Git 将提示如下的提交信息: Revert "File with three...image.png 如果我们在分支中看它的提交记录,它们看起来应该像下面的这样。...这就是强大的 Git 的核心能力之一:能够很快速、很容易地尝试任何事情,并且如果不成功就撤销它们。

    3.9K20

    一步步学习EF Core(3.EF Core2.0路线图)

    前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较的和EF6.x差距比较大的东西....Core是一个的代码库,所以在Entity Framework 6.x中存在一个功能并不意味着会在EF Core中实现。...其中一部分已经在预览1完成了 存储过程映射,允许EF使用存储过程来保存对数据库的更改(FromSql已经提供了对使用存储过程进行查询的良好支持)。...从数据库更新模型(#831) - 允许您逐渐更新以前从数据库反向设计的模型,并更改了对数据库模式所做的更改。这允许您更新模型以匹配当前模式,而不会丢失在反向设计后手动对模型进行的任何更改。...简单的日志记录API(#1199) - 我们想要一个简单的方法来记录正在执行的SQL(就像Database.Log从EF6.x)。我们还需要一种简单的方法来查看正在记录的内容。

    3.1K90

    基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

    领域对象是DDD的核心,我们会依次分析聚合/聚合根、仓储、规约、领域服务的最佳实践和规则。内容较多,会拆分成多个章节单独展开。...在 Issue 类中调用方法添加一个的 Comment,比如: Issue.AddCommnet(...) 作为一个单一的数据库更新操作,将 Issue(包括所有子集合)保存到数据库。...保存更改到数据库。 EF Core 提供 变更跟踪(Change Tracking)功能,实际上你不需要调用 _issueRepository.UpdateAsync(...) 方法,会自动进行保存。...如果用例使用单个聚合,读取并保存为单个单元,那么对聚合对象所做的所有更改,将作为原子操作保存,而不需要显式地使用数据库事务。...如果以后需要,可以添加更改方法并将其设置器设置为私有。领域层是内部项目,并不会暴露给客户端使用,所以这种更改不会有问题。

    3.1K30

    每个新手开发人员都必须知道的8条基本Git命令

    3.git add git add分阶段进行更改。 如果您完成了代码中的更改,则有必要对这些更改进行阶段处理,并对其进行快照保存,以将其包括在存储库的历史记录中。...$ git add 如果在多个文件中进行了更改,并且要在同一命令中暂存所有文件,则请添加所有文件的文件路径,并用单个空格分隔...首先分阶段进行更改,然后进行快照,可以完全控制存储库的历史记录。 以下GIF显示了git add命令: ? ? 4.git commit git commit将快照保存到存储库的历史记录中。...git add会执行第一步,即暂存更改,而git commit会执行最后一步,即将快照保存到存储库的历史记录中。 在Git中,这两个步骤完成了变更跟踪过程。...如果要向项目commit特性,则应为“添加功能”。 以下GIF显示了git commit命令: ? 这是编写提交说明的简单方法,但是还有一种更深入的方法来编写带有标题和描述的。 ?

    96610

    .net EF 新手教程

    下来我们在项目中添加ADO.NET实体数据模型 模型的内容根据大家的需要进行选择,我在这里选择来自数据库的EF设计器,这样他会帮我自动生成数据库中的EF设计器。...对象为对象,并且已添加到对象上下文 使用Add()方法添加的对象 Deleted 对象已从上下文中删除 使用Remove方法溢出的对象 Modified 对象上的一个属性已更改 受DbContext管理...,到添加到上下文,到保存的过程,大家先不用关注代码的意思,主要看下状态的变化。...No.4 添加&&修改&&删除 保存修改删除的思路基本一致,这里我做一个简单的说明然后放上代码。...1.创建要添加修改删除的对象信息 2.改变对象状态到相应的删除添加修改状态 3.进行保存efdb.SaveChanges() 代码如下: 修改 Students objStudents

    13500

    Java和Node.js实战 MongoDB 4.x 特性:Change Streams 变化流

    在MongoDB 3.6之前,如果我们要监听MongoDB中正在发生的变化,必须“tail the oplog”,跟踪操作日志,这是一个用于复制记录变更的集合。...顺便说一句,上面的示例中更改文档是在MongoDB 4.x数据库上测试的,在以前的版本_data上添加了一个字段。...这是一个恢复标志字段,允许对其进行记录的应用程序使用它们在流中的该点重新开始执行未完成的任务。...有些变化我们不会明确看到信息;必须通过在集合中创建文档来推断集合和数据库的创建过程。 当复制到另一个MongoDB时,这些都不是大问题,因为数据库和集合创建是在新文档生成时创建的,可以推测出来。...复制集合的困难点在于,检查集合是否影响以前的集合,还有就是我们监控不到创建索引和其他操作,这些操作不会反映在为更改文档的日志中,不能通过变更流监控。

    1.5K10

    Java和Node.js实战 MongoDB 4.x 特性:Change Streams 变化流

    在MongoDB 3.6之前,如果我们要监听MongoDB中正在发生的变化,必须“tail the oplog”,跟踪操作日志,这是一个用于复制记录变更的集合。...顺便说一句,上面的示例中更改文档是在MongoDB 4.x数据库上测试的,在以前的版本_data上添加了一个字段。...这是一个恢复标志字段,允许对其进行记录的应用程序使用它们在流中的该点重新开始执行未完成的任务。...有些变化我们不会明确看到信息;必须通过在集合中创建文档来推断集合和数据库的创建过程。 当复制到另一个MongoDB时,这些都不是大问题,因为数据库和集合创建是在新文档生成时创建的,可以推测出来。...复制集合的困难点在于,检查集合是否影响以前的集合,还有就是我们监控不到创建索引和其他操作,这些操作不会反映在为更改文档的日志中,不能通过变更流监控。

    1K20

    02-EF Core笔记之保存数据

    EF Core通过ChangeTracker跟踪需要写入数据库的更改,当需要保存数据时,调用DbContext的SaveChanges方法完成保存。...如果已回滚事务,则所有操作都不会应用到数据库。 默认情况下,每次SaveChanges方法的所保存的所有更改都将在一个事务中,要么全部保存成功,要么全部保存失败。此种情况已能满足大多数应用的需要。...并发控制 数据库并发指多个进程或用户同时访问或更改数据库中的相同数据的情况。 并发控制指的是用于在发生并发更改时确保数据一致性的特定机制。 EF Core采用乐观并发控制来解决并发冲突问题。...状态断开对象的处理 EF Core判断更新或添加数据是通过ChangeTrancker来进行的,这个操作需要在同一个DbContext中进行,而web应用通常先查询到数据,然后将数据发送到客户端进行相应的操作...解决这个问题最简单的方法是,更新和添加使用不同的web路径,服务器端通过提供Add方法和Update方法来区分操作。

    1.8K40

    宝塔linux面板搭建SVN控制系统的图文教程

    svn,别说还真有,只是收费,抱着学习的态度打算在宝塔linux面板上手动安装svn服务,为防止后期还会涉及重新搭建svn,所以记录下此次的安装过程。...宝塔安装不赘述了,不会的参考以往的教程,此处省略几百字,安装宝塔,部署环境之后,我们使用SecureCRT或者宝塔面板的终端命令都可以,手动安装svn控制软件。...到此,配置已经全部完成,账号信息已经添加成功 更改 svnserver.conf 时需要重启SVN服务才生效,更改authz,passwd文件时则不需要重启服务, 第四步同步库文件: 方法有两种,一种敲代码...顺手把svn重启命令附上: 查看svn的进程,筛选svn的进程命令: ps -ef|grep svn 杀死主进程,杀死进程的命令用  kill -9 进程id 如图ID是3280,就使用 kill -9...到此,配置已经全部完成,账号信息已经添加成功 更改svnserver.conf时需要重启SVN服务才生效,更改authz,passwd文件时则不需要重启服务

    1.8K20

    Git学习-07

    1.创建一个仓库git clone https://gitcode.net/qyj19920704/blog.gitcd blogtouch README.mdgit add README.mdgit...| grep /blog/blog/node_modules | grep -v grep | awk '{print $2}'`kill -9 `ps -ef | grep /blog/blog/...以下是 Git 的一些核心概念和功能:分布式版本控制:与集中式版本控制系统(如 SVN)不同,Git 允许每个开发者拥有完整的代码库副本,包括完整的历史记录。...提交(Commit):保存项目历史和文件快照的记录。远程仓库(Remote Repositories):可以是服务器上的仓库,用于与他人共享代码。克隆(Cloning):从远程仓库复制代码库到本地。...拉取请求(Pull Requests):在分布式开发环境中,用于请求将你的更改合并到主分支。分支策略:Git 支持多种分支策略,如 Git Flow、GitHub Flow 等。

    9000

    Git 版本控制的核心概念

    Git 的这个核心功能(在你的项目中创建保存点)分为两个阶段: 将事物(更改的代码和文件)添加到要在时间线中提交(保存)的临时区域,以及 实际上提交(保存)的那些东西。...Photo by William Bayreuther/Unsplash 拍摄照片就像对项目进行更改:编写代码、添加图像、删除旧文件等等。你正在创建最终要在 Git 提交中保存的内容(“保存点”)。...此过程称为“添加到暂存区域”。添加到暂存区域不会创建提交,它只是准备提交。 将一些文件添加到暂存区域后,你可能会发现仍要做一些更改。没问题!...由于此时 Git 尚未实际保存(提交)任何内容,你可以简单地进行所需的更改,然后将这些更改添加到临时区域,即使这些更改发生在与先前添加的文件相同的文件中。...在这种状态下,你不再使用 master 分支,也就是说你可以在这里进行实验性更改甚至创建的提交,所有这些操作都不会丢失你在 master 分支上的代码(上面的例子提交哈希 a3 )。

    98350

    Nginx启动、重启、重新加载配置文件和平滑升级

    工作进程的数量是在配置文件中配置的,一般设置为cpu的核心数线程数。...Nginx可以通过信号控制,默认情况下,主进程的进程ID记录在/usr/local/nginx/logs/nginx.pid 文件中。...,即打开的日志文件和的socket 监听,如果失败,它将回滚配置更改并继续使用旧的配置,如果成功了,它开启的工作进程,并给旧的工作进程发消息让它们优雅的关闭,旧的工作进程接收到关闭信号后,不再接收的请求...八、nginx平滑升级 如果你需要升级或者添加、删除服务器模块时,可以通过nginx的平滑升级,在不停止服务的情况下升级nginx。...nginx主进程和对应的工作进程,并新建一个的nginx.pid保存的主进程号 [root@songguoliang logs]# pwd /usr/local/nginx/logs [root@songguoliang

    1.3K10

    Git操作快速入门:掌握代码版本控制的秘诀

    通过以下命令可以管理文件状态: # 添加文件到暂存区 git add 文件名 # 提交文件到仓库 git commit -m "提交信息" git add 命令会将文件的当前更改添加到暂存区,表示这些更改将包含在下一次的提交中...git commit 命令会将暂存区中的更改记录到仓库中,形成一个的提交。提交时需要添加描述信息,说明本次提交的内容。...分支管理 分支是Git的核心功能之一,允许你在不同的分支上进行开发工作,而不会影响主分支。...git push 命令会将本地分支的更改推送到远程仓库中。git pull 命令会从远程仓库拉取最新的更改,并与本地分支合并。git fetch 命令会从远程仓库获取最新的信息,但不会自动合并。...创建一个分支可以保存你的修改,或将修改合并到一个已有分支中。

    8210
    领券