问题标签 [savechanges]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 实体框架和 MVC 3:无法更改关系,因为一个或多个外键属性不可为空
我一直在尝试使用一个视图来更新对象及其所有子集合(基于具有实体框架模型的 SQL Server 数据库中的一对多关系)。
有人建议我应该使用 AutoMapper,我尝试了它并让它工作。(请参阅尝试将 AutoMapper 用于具有子集合的模型,在 Asp.Net MVC 3 中出现空错误)。
但是解决方案真的很难维护。当我尝试最简单的方法时,直接使用实体对象作为模型(“顾问”对象,所有子集合的父对象),我能够在POST,我可以使用 UpdateModel 来获取它们,包括子集合。简单的。当然,UpdateModel 仅在从此处的提示创建自定义模型绑定器后才起作用 SO:
从我的自定义模型活页夹中:
这是我的简单编辑 POST 方法:
但在那之后 UpdateModel 工作了。问题是,在下一阶段,当尝试在上下文中调用 SaveChanges 时,它会失败。我收到此错误:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
我不明白出了什么问题。我看到发布的顾问对象中的所有正确值,我只是无法将其保存到数据库中。在这种情况下,AutoMapper 的路线(虽然是一个有趣的工具)运行不佳,它使我的代码变得非常复杂,并使应用程序(应该相当简单)成为维护的噩梦。
任何人都可以提供有关我为什么会收到此错误以及如何克服它的任何见解吗?
更新:
在这里阅读了一些帖子,我发现一个似乎有点相关的帖子:How to update model in the database, from asp.net MVC2, using Entity Framework? . 我不知道它是否与此有关,但是当我在 POST 之后检查顾问对象时,似乎该对象本身具有实体键,但集合中的各个项目没有(EntityKeySet = null)。但是,每个项目都具有正确的 ID。我不会假装用 EntityKey 理解这些,所以请解释它是否对我的问题有任何影响,如果有,如何解决它......
更新 2:
我想到了一些可能与我的问题有关的事情:视图正在使用 Steven Sanderson 描述的技术(参见http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length- list-aspnet-mvc-2-style/),并且在调试时,在我看来,UpdateModel 似乎无法将 View 中的集合中的项目与实际 Consultant 对象中的项目匹配。我想知道这是否与这种技术中的索引有关。这是该代码中的助手(我自己不能很好地遵循它,但它使用 Guid 来创建索引,这可能是问题所在):
但是话又说回来,我不会认为这应该是问题,因为隐藏的输入包含 value 属性中的 id,我认为 UpdateModel 只是查看了字段的名称来获取 Programs(集合)和 Name(属性),然后是 id 的值...?然后在更新期间似乎又出现了一些不匹配。无论如何,这也是从 FireBug 生成的 html:
有谁知道这是否是问题所在?如果是这样,我该如何解决它以便能够使用 UpdateModel 轻松更新集合?(虽然仍然能够在 POST 之前在视图中添加或删除项目,这也是该技术开始的目的)。
c# - 保存更改失败,但未抛出异常
我有一个案例,我正在调用 SaveChanges,它失败了,抛出了 try 块,但没有被抓住。我从来没有听说过这种情况,您的帮助将不胜感激。
我在 Visual Studio 2008 中使用 C#,带有 .net 框架 3.5SP1。
有问题的代码是:
我已经在 SaveChanges 行之前和之后放置了日志语句,并且没有打印直接跟随的语句。但是,也不会记录异常,也不会保存数据。
老实说,我对如何在不引发异常的情况下发生错误感到困惑。我只能认为 C# 还有其他方式报告我没有“捕捉”的错误。
如果有人有指针或建议,我将不胜感激。
布鲁斯。
c# - EntityFramework 在保存更改之前显示实体
Entity Framework ObjectSet 及其方法 ToList 显示刚刚保存的实体。这意味着,当我打电话时
然后(不调用 SaveChanges)
DataGrid 不显示新添加的实体(甚至context.Customers.Count()
不包括它)。
有什么方法可以显示这些实体(带有 的实体EntityState = Added
)?
提前致谢。
c# - 使用 EntityFramework 4 为实体分配 id
我想为我的实体实现“默认”ID 生成支持。
保存实体时,我希望 EntityFramework 仅在尚未设置的情况下为实体生成 id 值。如果 ID 已经有一个非空、非零值,我希望在将实体保存在数据库中时保留该实体 ID。
我正在将数据从旧数据模型(从旧数据库创建的 EntityFramework 模型)迁移到新创建的(模型优先)EntityFramework 模型。我们称旧模型为 A,新模型为 T。
通常,我希望 T 实体在保存时设置其 ID(它们都是 int64),以便长期使用新模型。
目前,我正在根据要从中迁移的相应 A 实体的 Id 显式分配 T 实体 Id。这样迁移结果很容易检查。
但是,虽然我可以在迁移例程中将 T 实体的 id 分配给与 A 实体相同的 id,但在我保存实体后,Id 值已更改。
有没有办法覆盖 T 模型中所有实体的默认保存方法,因此只有在保存之前尚未在实体中设置 id 值时才分配 id 值?
我在这里查看了其他一些 EntityFramework/Id 问题,但在我看来,他们都没有问同样的问题。
感谢任何线索。
c# - 传递 ObjectContext EF 4.0
我有两个类 Queries 和 ContactRepository。
当我调用 CreateContactAddress() 时,SaveChanges() 方法崩溃并出现以下错误:
无法确定相关操作的有效排序。由于外键约束、模型要求或存储生成的值,可能存在依赖关系。
我可以将 LINQ 查询移动到 CreateContactAddress() 方法本身,并且一切正常。谁能解释发生了什么?
excel-2010 - Excel 2010 - 为什么带有宏的工作簿要求保存更改
通常,在使用包含 VBA 宏的工作簿时,我可以保存工作簿,然后立即尝试关闭它。Excel 然后询问我是否要保存更改。是什么导致了这种行为?
python - python,保存对导入模块所做的更改
我有一种情况,用户可以从另一个类中选择另一种方法,并使用 .im_func 在他们自己的类中使用它。我在下面举一个例子
其中 methodX 可以在两个模块中以不同的方式实现。当我实例化对象时说 foo1.Class(), methodX from module
foo2` 被使用。
我的问题是如何将所做的更改保存为 foo3.py 到新的源代码文件。
sql-server-2008 - 实体框架 SaveChanges 函数不会提交我的更改
我有一个初始选择,我将其放入列表中。我使用列表循环遍历每条记录,并在它满足某些条件的地方通过一系列插入、删除和更新运行。最后调用 SaveChanges() 方法来提交更改。
代码在没有引发异常的情况下运行,但没有任何更改反映在数据库中。我一直在网上搜索没有运气。
我正在使用带有 SQL2008 后端的 VS2008。
请帮忙?
问候, GPR。
entity-framework - 保存时忽略可选列
当我通过自动生成的 EF 从表单更新表时,如果我因为不想可编辑而从视图表单中删除了一些数据列,那么这些列将更新为空值,如何避免这种行为?我在这里读到:实体框架:忽略从模型中删除它的列,但我并不总是想忽略这些数据列。
谢谢!
entity-framework - 实体框架 SaveChanges() 在不同的 DbContext 中插入不必要的行
我的超市模型包含一个 StockItem 类和一个包含 StockItem 字段的 Alert 类:
我有一个使用一个 DbContext 获取所有 StockItems 的函数:
还有另一个处理这些项目的函数,并在另一个 DbContext 中添加新的警报:
问题是:当警报被保存时,一个新的库存项目(具有不同的 id)被添加到数据库中,尽管它已经存在了!任何解决方案?