可能是重复问题:
持久性无知的好处是什么?
经过一段时间和一些问题,试图弄清楚实体框架,我得出的结论是,我不明白持久性无知对象的意义。
据我所知,使用持久性感知对象和持久性无知对象之间的实际区别在于,一个类似于以下内容:
Person p = Person.Load(id);
p.Active = false;
p.Save();
另一个是沿着这条线使用的
using (var context = new MyContext())
{
Person p = context.Persons.Single(x => x.ID == id);
p.Active = false;
context.SaveChanges();
}
在第一种情况下,我可以返回
p
,并在稍后的某个时刻调用Save()
。在后一种情况下,我可以返回p
,但需要将其放入新的MyContext()
中以保存它。在第一种情况下,假设Person从某个基对象继承Load()和Save(),该基对象实际上处理数据库逻辑,如果我想改变持久性,那么只需要更改该基对象(甚至只需有一个IPersistent
接口,多个基类可以实现以访问多个存储)。在后一种情况下,如果持久层发生变化,我需要更改每个MyContext
实例,并且分步骤进行将非常复杂。
我的印象是持久性无关是一件好事。我只是不明白为什么。它似乎要设置、使用、整体更改和分步更改更加复杂,而这种复杂性没有任何优势。我是错过了重要的东西,还是我的整个理解持久性感知/无感知的含义是错误的?