Click here to Skip to main content
15,867,594 members
Articles / Web Development / ASP.NET
Article

Object Relational Persistence in .NET

Rate me:
Please Sign up or sign in to vote.
3.94/5 (17 votes)
20 Dec 20053 min read 57.3K   374   41   11
Value added object persistence scheme in .NET.

Introduction

Most of you would have come across or used a generic framework for object persistence in .NET. I have used two different schemes - one of them decorates the fields/properties with attributes and the framework uses reflection to retrieve metadata and persist the object (See Figure 1). In the other scheme, the metadata is externalized using XML files (See Figure 2) and again reflection is used to complete the persistence.

Image 1

Image 2

Pros and cons

I personally prefer the externalized XML scheme for the following reasons:

  1. Even if the source code is not available, we can define mapping for classes and store them (very useful when third party libraries are used).
  2. Class definitions are not cluttered with mapping data.
  3. Multiple mapping can be defined if the same object has to be persisted in different schema. Basically it allows for flexibility and extensibility.

In my personal view, both the schemes are fragile in nature. There is no type safety or compile time check to ensure that the mappings are complete and valid.

Improved solution

I recently developed a prototype framework for object-relational persistence which provides basic data CRUD (Create, Retrieve, Update, Delete) services to business objects using the externalized XML mapping scheme. I ensured that the scheme can embrace System.Transaction for transaction support.

In Figure 3, you can see the class definition, mapping data and the code snippet which creates an instance of the employee class and saves it in a database. This implementation is like other existing implementations and I have added value to it using a new feature introduced in ASP.NET 2.0 compilation model:

Image 3

I wrote a custom build provider and mapped it to files with extension ".orm" in the App_code folder (see Figure 4). This custom build provider parses the existing mappings and generates a wrapper class for each class mapping which ensured that only the defined operations are applicable on the business object.

Image 4

For example, if the ORM file had mapping definition for INSERT and UPDATE operations only, then the wrapper class will have methods only for Insert and Update operations. If the class name is not spelled correctly or if there are duplicate mapping definitions for the same class, an error is thrown during compilation. If the developer makes changes to the mapping definitions and saves the files, Visual Studio 2005 immediately recognizes the change, initiates the build and intellisense is made available for the newly added methods immediately (See Figure 5):

Image 5

Figure 6 shows a sample code generated by the build provider behind the scenes. Using this approach, the fragile mapping definitions in the XML files are validated and made to safe code during compilation time. This will greatly reduce the developers time during development and unit testing cycles:

Image 6

Improvements

This build provider can be further extended to verify whether all the stored procedures in the mapping files exist in the database or not, verify whether all the required stored procedure parameters are mapped or not and more...

Conclusion

I strongly believe that this compilation support will add more value to the existing object relational persistence schemes and open up many more possibilities.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralRapidly Develop .NET Applications with O/R Mapping Pin
Iqbal M Khan19-Mar-07 0:01
Iqbal M Khan19-Mar-07 0:01 
GeneralSmall issue Pin
mvanbeusekom30-Aug-06 5:10
mvanbeusekom30-Aug-06 5:10 
GeneralSome thoughts... Pin
Steven Campbell29-Dec-05 7:52
Steven Campbell29-Dec-05 7:52 
QuestionNice Article - Questions ? Pin
erickm_us27-Dec-05 2:41
erickm_us27-Dec-05 2:41 
AnswerRe: Nice Article - Questions ? Pin
Arunachalam Karthikeyan28-Dec-05 7:40
Arunachalam Karthikeyan28-Dec-05 7:40 
GeneralNice article Pin
sherwinds27-Dec-05 1:34
sherwinds27-Dec-05 1:34 
GeneralRe: Nice article Pin
Arunachalam Karthikeyan28-Dec-05 7:33
Arunachalam Karthikeyan28-Dec-05 7:33 
QuestionWhy would you want to do something like that ? Pin
TimMerksem27-Dec-05 1:18
TimMerksem27-Dec-05 1:18 
Generalnice read, very bad presentation Pin
ogrig20-Dec-05 12:16
ogrig20-Dec-05 12:16 
Good article, short and to the point.
But using images for the code samples makes it a real pain to use. You cannot read it properly, you cannot print it properly and you cannot copy and paste at all.

I can understand that seeing code samples side by side is sometimes nice, but you also use images when there is no need for it (why use a jpg for figure 2?).
The only thing that could not have been represented in text is figure 5, but why do I need to read your article to see how IntelliSense looks like?!? That figure is just useless.

I'm sorry to go overboard for something like this, but I really feel you could present your material a lot better if you get rid of the images.

OGR
GeneralRe: nice read, very bad presentation Pin
Igor Vigdorchik20-Dec-05 12:25
Igor Vigdorchik20-Dec-05 12:25 
GeneralRe: nice read, very bad presentation Pin
ogrig20-Dec-05 13:54
ogrig20-Dec-05 13:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.