我们有自己的自定义ORM包装器,其中包含Contact
,Company
等类,它们具有Name
,Address
等属性。您“创建”一个类的实例,它隐式地从数据库下载当前记录:
// fetch a contact with ID myRecordID from connection myConnection
Contact myContact = Contact.Create(myRecordID, myConnection);
myContact.Birthday = Date.Now;
事情就是这样:出于性能原因(加上其他考虑因素,例如交易),在设置属性时隐式不会发生。相反,您必须致电save()
:
myContact.save(); // great! the new birthday is in the database
这很有效 - 除非您忘记来致电save()
。编译器不会看到问题,但是上面的代码在没有保存的情况下没有做任何有用的事情。
我想知道API是否可以让编译器知道,当设置了属性时,编译器应该警告save()
是否在{{1}之前调用实例离开范围。
答案 0 :(得分:0)
您必须实现一些功能,让您的代码知道实体已被更改。例如,通过在实体中实现INotifyPropertyChanged并监听更改。在需要持久保存到数据库的每个属性上更改属性。
联系人更改后,您甚至可以在交易结束时自动保存联系人。当然,您需要添加基础架构代码。