|
|
1
1
关于你的第一个问题:
这可能是由于您的第二个问题(“添加”状态而不是“修改”)。上下文可能试图添加博客而不是保存更改,因此会出现FK约束错误。 关于第二个问题:
要考虑的问题是“您是否在服务器和客户端上使用相同类型的生成代码”?STE已经 known to not keep track of changes 使用数据服务元数据生成的类型时。对于ste,有一段重要的代码在构造函数中被激活,它不会通过元数据生成的类型来持久化,因此这是导致这个问题的原因。 至于你最后的问题:
是的,可以(我已经对此进行了测试)将changes()/savechanges()应用于直接来自客户机的实体,而不管实体最初来自何处(来自要在客户机上修改或创建为要添加的新实体的服务器)。 |
|
|
2
1
我对此的观察是,虽然ste在ef4中在客户机有状态的情况下工作得很好,但是在无状态环境中它们并不像预期的那样工作。 MVC强调了这一缺点。例如,让我们以一个典型的实体“用户”和一个典型的场景、editcontroller和edit视图为例。 当我们转到数据库(get user、start tracking、return)或服务(在反序列化后更改跟踪自动打开)时,实体在控制器和视图中的行为与预期一致。 但是,当post返回时,我们的controller方法得到的实体是 新实体 而不是在GET请求时提供给我们的。因此,这个实体没有变更跟踪,处于添加状态,如果我们将它作为在get阶段传递给我们的相同实例来处理,它将炸毁我们的数据库。 当前,您可以将EF4STE标记为已修改、应用更改并在实体真正是新的或只是错误地标记为已添加时保存。这就是您现在所能做的一切来支持这个场景。除非MVC团队想出更好的模式来支持STES,或者除非在实例化模型以缓存实体实例时更改模型绑定器的默认行为… |
|
|
3
0
我们在非常相似的问题上挣扎——周围的更新。根据那里的信息,我们收集到STE还没有准备好生产,但确实考虑使用它们。 无论如何,这里的问题集中在附加和分离之间的区别,以及ObjectStateManager和STES之间的交互。在您描述的例子中,这确实有效,因为它一直连接在一起,并且ste从未真正转换到使用其ste行为(这只在反序列化到客户机之后发生,或者它们重新连接到一个附加的实体)。 为了回答它们为什么会以添加的形式出现:
我发现这一切都令人困惑,对Julia Lerman的采访和在线帖子似乎表明,目前的STE版本还没有为现实世界做好准备…… 请看迭戈·维加(EF团队)的回复。
http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/557e6db0-51df-45e5-a2e9-c31995969554 希望这有帮助 |
|
|
4
0
我不相信我曾经说过马还没有准备好面对现实世界。他们只是不适合每个人。对于数据集/数据表用户来说,它们是一个非常好的工具,他们只需要一些可以轻松工作的东西。对于这些用户(他们中有很多人)来说,将ste实体放在客户机应用程序中并不是一件坏事。他们可能已经拥有管道的两侧。 |
|
|
Paritosh · EF Core为什么要返回相关属性 11 月前 |
|
|
chuckd · 如何检查EF Core中是否存在当月创建的行(记录) 1 年前 |
|
|
Steven · 带sqlite的EF与sqlite净pcl 1 年前 |
|
|
Riyaz Vagapov · EF核心交易 1 年前 |