我在由 SQL CE 数据库支持的 WPF MVVM 应用程序中使用实体框架和代码优先方法。我正在尝试设计一个模型类,它可以简单地更新它的一个属性值以响应另一个属性值的变化。基本上,我正在寻找一种在 EF 初始化实例后定义“自我跟踪”的 poco 的方法。如果答案涉及放弃 Code First,那么也许这是唯一可行的途径(不确定)。一个基本的例子:
class ThingModel
{
public int Id { get; set; }
public bool OutsideDbNeedsUpdate { get; set; }
private string _foo;
public string Foo
{
get { return _foo; }
set
{
if (_foo != value)
{
_foo = value;
OutsideDbNeedsUpdate = true;
}
}
}
}
但是,上述问题在于,每当 DbContext 在运行时初始化实例并设置字段时,我的类都会过早地设置依赖字段作为响应。换句话说,我正在寻找一种简单的模式,它允许我的 poco 类仅在 EF 完成实例上的字段初始化后才进行这种特殊的更改跟踪。
我意识到我可以在此处执行类似解决方案的操作, 但我的业务案例要求将此特殊更改跟踪与 EF 更改跟踪分离,换句话说,无论上面的 HasChanges 属性的状态如何,我都需要 SaveChanges 的能力。这是因为我希望能够定期检查我的实体上的 HasChanges 属性,进而更新外部数据库中的依赖值(与支持 EF DbContext 的数据库不同),并且 EF DB 之间可能会发生许多更改/保存推到外部数据库。因此,我希望将标志与我的数据库中的记录一起保存,并在对外部数据库进行定期更新时将其重置为 false。