|
|
1
0
虽然大多数示例都实现了由
为了能够还原更改,EF实际上跟踪对象的原始DB版本以及对象的更改版本。然而,获取这些信息有点复杂: 断开并查找实体:
就我个人而言,我只是处理复制并将原始对象保存在代码中,它更干净,似乎更安全。它也可能更快,但我从未运行过测试来证明这一点。如果您处于多用户环境中,那么只需从DB中重新加载数据,就不会错误地显示过时的数据。 |
|
|
2
0
问题1:您希望您的实体拥有
现在,存储库的责任是创建EF上下文,而不是实体。 问题2:EF上下文是轻量级的,正常的使用模式是您描述的,上下文是临时创建的,然后在保存更改后进行处理。可以想象,你可以创建一个桌面应用程序,它在应用程序的生命周期内有一个上下文,但如果在应用程序运行时数据库发生了更改,则上下文的内容将过时。状态的不一致迟早会影响到你,我认为如果你坚持瞬时上下文模式,你会得到一个更容易维护的应用程序。如果您正在编写一个web应用程序,您将无法选择在请求之间保持数据库上下文的活动状态,而这种模式在编写业务应用程序时已被证明是非常成功的。 因此,我建议:
|
|
|
3
0
听上去…你更喜欢ActiveRecord模式。。。但EF遵循UnitOfWork模式。。。在您的情况下,您使用的是POCO实体。。。。他们是“持续无知”的。
隐藏“EF技术”的一种方法是创建一个“存储库”层,在其中隐藏所有EF逻辑,即“上下文”的管理。但创建另一层可能需要大量重复工作。通常,您的存储库将共享相同的上下文。
如果您保留EF上下文,那么它将为您管理已检索对象的更改跟踪和缓存。 或者,您可以在断开连接的模式下工作。。。每次要检索/删除实体时,都可以在其中创建上下文。。。然而,在提交之前,您必须自己进行缓存和状态跟踪,并将对象“重新附着”到上下文。 |
|
|
Paritosh · EF Core为什么要返回相关属性 1 年前 |
|
|
chuckd · 如何检查EF Core中是否存在当月创建的行(记录) 2 年前 |
|
|
Steven · 带sqlite的EF与sqlite净pcl 2 年前 |
|
|
Riyaz Vagapov · EF核心交易 2 年前 |