数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

用ObjectSpaces重建IBuySpy的数据访问层(2)


发布日期:2019年10月05日
 
用ObjectSpaces重建IBuySpy的数据访问层

根据参数删除一个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 :

               

上一篇:元数据库库管理

下一篇:运用设计模式构建通用数据库访问类