可能重复:
持久无知有什么好处?
经过一段时间和一些试图弄清楚实体框架的问题后,我得出的结论是,我只是不明白持久性无知对象的意义是什么。
据我所知,使用持久性感知对象和持久性无知对象之间的实际区别在于,使用的对象类似于
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()
在稍后调用。在后者中,我可以 return p
,但我需要将它放入一个 newMyContext()
中以保存它。在第一种情况下,假设 Person 从实际处理数据库逻辑的某个基础对象继承 Load() 和 Save(),如果我想更改持久性,它只涉及更改该基础对象(甚至只是有一个IPersistent
接口可以实现多个基类来访问多个商店)。在后者中,如果持久层发生更改,我将需要更改每个实例MyContext
,并且零碎做会非常复杂。
我的印象是坚持-无知是件好事。我只是不明白为什么。似乎设置、使用、更改批发和零碎更改要复杂得多,这种复杂性没有任何优势。我只是错过了一些重要的事情,还是我对持久意识/无知意味着什么的整个理解有缺陷?