- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设您的实体中有这些类。
public class Parent
{
public int ParentID { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
public class Child
{
public int ChildID { get; set; }
public int ParentID { get; set; }
public virtual Parent Parent { get; set; }
}
并且您有一个用户界面来更新 Parent
及其 Children
,这意味着如果用户添加新的 Child
那么您必须插入,如果用户编辑了一个现有的 Child
那么你需要更新,如果用户删除了一个 Child
那么你必须删除。现在很明显,如果您使用以下代码
public void Update(Parent obj)
{
_parent.Attach(obj);
_dbContext.Entry(obj).State = EntityState.Modified;
_dbContext.SaveChanges();
}
它将无法检测到 Child
内的更改,因为 EF 无法检测到导航属性内的更改。
我已经问了大约 4 次这个问题,得到的答案不一。那么,实际上有可能在不变得复杂的情况下做这些事情吗?这个问题可以通过在 Parent
和 Child
之间分离用户界面来解决问题,但我不想这样做,因为合并了 Child
和 父级
在一个菜单中在业务应用程序开发中很常见,并且更加用户友好。
更新:我正在尝试下面的解决方案,但它不起作用。
public ActionResult(ParentViewModel model)
{
var parentFromDB = context.Parent.Get(model.ParentID);
if (parentFromDB != null)
{
parentFromDB.Childs = model.Childs;
}
context.SaveChanges();
}
EF 不会检测 Children 内部的变化,而是无法判断如何处理旧的 child。例如,如果 parentFromDB
在我第一次从数据库中拉出它时有 3 个 child ,那么我删除第二个和第三个 child 。然后我得到 The relationship couldn't be changed because a or more of the foreign-key properties is non-nullable
保存时。
我相信这就是发生的事情: The relationship could not be changed because one or more of the foreign-key properties is non-nullable
这让我回到原点,因为在我的场景中,我不能只从数据库中获取并更新条目并调用 SaveChanges
。
最佳答案
because EF cannot detect changes inside Navigation Property
这似乎是对 _dbContext.Entry(obj).State = EntityState.Modified
没有将导航属性标记为已修改这一事实的描述。
当然,EF 会跟踪导航属性的变化。它跟踪附加到上下文的所有实体的属性和关联的变化。因此,您的问题的答案现在是肯定的……
Is it possible to update child collection in EF out of the box
...是:是。
唯一的问题是:您不能开箱即用。
更新任何实体的“开箱即用”方式,无论它是某个集合中的父实体还是子实体:
SaveChanges()
。就是这样。 Ef 跟踪更改,您永远不会显式设置实体 State
。
但是,在断开连接(n 层)的情况下,这会变得更加复杂。我们对实体进行序列化和反序列化,因此没有任何上下文可以跟踪它们的变化。如果我们想要将实体存储在数据库中,现在我们的任务是让 EF 知道更改。基本上有两种方法可以做到这一点:
当涉及到关联时,我们总是必须描绘状态。我们必须从数据库中获取当前实体并确定添加/删除了哪些子项。无法从反序列化对象图本身推断出这一点。
有多种方法可以减轻绘制状态这一枯燥而复杂的任务,但这超出了本问答的范围。一些引用:
关于c# - 开箱即用地更新 EF 中的子集合真的不可能吗(又名非 hacky 方式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33056482/
我正在构建一个游戏,例如 Same Game ,当我必须创建一个新关卡时,我刚刚运行了一个算法来用 N 种颜色填充板子,这个算法随机填充板子,但显然以这种方式生成的关卡并不是都有解决方案。 我必须做一
有两个 TFLearn 项目 TF Learn (aka Scikit Flow) https://github.com/tensorflow/tensorflow/tree/master/tenso
我正在尝试使用代码从 NSDictionary 中解析一个整数 [activeItem setData_id:[[NSString stringWithFormat:@"%@", [dict valu
是否有在线资源描述 VC10 与 VC9 相比代码生成的变化? 我不是在谈论 c++0x 和其他不错的功能(例如内置 static_assert),也不是在谈论精致的 UI。我需要知道的是,由于优化、
那里。我是 Swift 的初学者,正在尝试将旧程序转换为 Swift3。我设法修复了一堆错误,但我无法使该功能正常工作。 fileprivate func extractEntitlements(_
我正在尝试实现 Easy Game Center link但我得到这个错误: Cannot convert value of type 'NSRange' (aka 'NSRange') to exp
我是 Swift 的新手,我正在尝试按照 lynda.com 上的类(class)编写一个简单的类(class)此代码在视频中运行良好,但在我的系统上出现错误。 protocol JSONDecoda
我的代码中有一个错误,例如“无法将类型‘NSRange’(又名‘_NSRange’)的值转换为预期的参数类型‘Range’(又名‘Range’)”,但我不知道如何解决这个问题请任何人帮助我? 我在这里
检查字符串字符的范围时出现此错误... @objc func textField(textField: UITextField, shouldChangeCharactersInRange range
我正在尝试用属性字符串替换子字符串。以下是我的代码。 let searchText = self.searchBar.text! let name = item.firstName ?? "" let
string convert(string name) { string code = name[0]; ... } 我从这一行得到“没有从'value_type'(又名'char')到'st
标题说明了一切,我相信。我只是好奇 () -> () 是否充当函数的参数... class Test { var isAwesome = true func loadData (callbac
我正在编写这个很棒的应用程序,至少我认为它很棒,在 C 中与 GObject 的完美结合,过了一段时间我开始遇到这个非常非常奇怪的错误。我也相信已经注意到它并不总是出现。然而,这可能只是 IDE 的错
我一直在尝试使用类型族来抽象 UI 工具包。当我尝试使用 HLists (http://homepages.cwi.nl/~ralf/HList/) 来改进 API 时,我陷入了困境。 我的 API
在 Scala 中,as explained in the PR that introduced it , parasitic允许偷窃 execution time from other thread
我在网上看到过这个关于加载效果的回车示例,但我无法正确理解它。为什么它必须是 2 \rLoading 而不是 1?有人可以给我解释一下吗? for (int j = 0; j < 3; j++) {
我有一个字符串列表 strs = [ 'foo', 'bar' ] 和一些字典 foo = {'a': 1, 'b': 2}, bar = {'a': 3, 'b': 4}。我想使用 with_ite
我有一个由许多点组成的LineString(坐标字符串),我想计算沿线最近的距离(从第一个点到最后一个点,方向性很重要)到一个点,就像这样说的:"project()" calculation 如果我不
所以最近我确实为我的业务购买了一些模板。它们基于 HTML/CSS/JQUERY/JS/PHP。 问题如下:在我的领域,并发率非常高,人们下载模板并自己使用它们是很常见的。由于我确实为它们付出了很多,
我认为这很容易找到预制的,但似乎我在网上找到的任何解决方案都只能解决部分问题。 我想对用户提供的文件名列表进行排序(这些文件大多以人和/或地址命名),有时使用不同的语言(主要是德语,带有一些法语和意大
我是一名优秀的程序员,十分优秀!