根据参数删除一个Announcement:
public void DeleteAnnouncement(int itemId)
{
ObjectSpace os = new ObjectSpace(_sMapFilePath _conn);
ObjectQuery query = new ObjectQuery(typeof(Announcement) ItemID = + itemIdToString());
Announcement ann = (Announcement) osGetObject(query);
osMarkForDeletion(ann);
osPersistChanges(ann);
}
新增一个Announcement
public void AddAnnouncement(int moduleId int itemId String userName String title DateTime expireDate String description String moreLink String mobileMoreLink)
{
Announcement ann = new Announcement();
annSetModuleID(moduleId);
annSetItemID();
annCreatedByUser = userName;
annCreatedDate = DateTimeNow;
…
ObjectSpace os = new ObjectSpace(_sMapFilePath _conn);
osStartTracking(ann InitialStateInserted);
osPersistChanges(ann);
}
修改一个Announcement
public void UpdateAnnouncement(int moduleId int itemId String userName String title DateTime expireDate String description String moreLink String mobileMoreLink)
{
ObjectSpace os = new ObjectSpace(_sMapFilePath _conn);
ObjectQuery query = new ObjectQuery(typeof(Announcement) ItemID = + itemIdToString());
Announcement ann = (Announcement) osGetObject(query);
annCreatedByUser = userName;
annTitle = title;
…
osPersistChanges(ann);
}
五最后修改界面层
原本界面层是把AnnouncementDB返回的DataSet绑定到Web Control上只要改成将AnnouncementOSDB返回的实体集合类绑定到Web Control上就可以了改动量很少很少
比如
原本将数据取出并绑定的代码(在Announcemenetsascxcs中)
AnnouncementsDB announcements = new AnnouncementsDB();
myDataListDataSource = announcementsGetAnnouncements(ModuleId);
myDataListDataBind();
只要将第一句改成
AnnouncementOSDB announcements = new AnnouncementOSDB();
实际上就是改从哪个DAL取数据就OK了
六讲讲ObjectSpaces
ObjectSpaces的架构是这样的
ObjectSpace类管理数据映射它负责(隐形的通过ObjectEngine)从数据源(IDbConnection或者ObjectSources)取数据和将数据更新回数据源(更新时会自动隐形启用Transaction)它通过ObjectSpaceGetObject()返回单个对象通过ObjectSpaceGetObjectSet()返回ObjectSet对象(这个对象类似于DataSet表示一组数据对象)通过ObjectSpaceGetObjectReader()返回ObjectReader对象(这个对象类似于DataReader是一个快速的forwardonly的数据对象读取器)它通过内含的ObjectContext来维护数据对象的原始值和监视数据对象的值的修改
我上面的代码演示目的是为了展示ObjectSpaces并没有完整的给IBuySpy加一个BLL我也没有演示数据之间的RelationsObjectSpaces可以支持非常丰富的RelationsOneToOneManyToManyOneToMany等等而且也提供了LazyLoading(在真正需要使用Relation的数据的时候才真正去取这些数据)
不过如果你也试着用ObjectSpaces来重建你的项目中的DAL我不知道你的感觉会不会和我一样那就是比现在更麻烦…比如不支持存储过程(难道支持而文档里面不提一句吗?EAP版本还支持的)手工写RSDOSDMSD太繁琐了(PDC上出现过一个Mapper Utility希望Whidbey会提供自动化工具)灵活性降低不少(所有ORM框架的问题)
Kaneboys blog :