CoolStorage.NET is a fully typed Object Relational Mapping library for .NET 2.0.

Although the feature list you find below is extensive, the main strength of CoolStorage.NET is the ease of use. Most ORM tools still require a lot of type casting and other plumbing to be written, CoolStorage.NET is designed to relieve the programmer from these tedious and error-prone tasks, making it very intuitive to use.

The main features are:

  • Supports SQL Server 2000/2005, MySQL, IBM DB2, SQLite, MS Access, VistaDB
  • Any existing relational data model can be mapped to CoolStorage objects with minimal effort
  • All relation types are supported: One-To-One, One-To-Many, Many-To-One and Many-To-Many
  • Completely typed object model (no type casts required)
  • Full support for transactions, including .NET 2.0 TransactionScope
  • Nullable columns can be mapped to .NET 2.0 nullable fields or any other value
  • Delayed (lazy) loading of data to minimize database access
  • Selective pre-fetching of all relation types for improved query performance
  • Powerful and intuitive database-independent object query language
  • Flexible event framework to intercept any event
  • Identity (auto-increment) keys are supported for all database types
  • Support for server and client generated Guid keys
  • Sessionless data access
  • Objects can be mapped to different databases, even across object relations
  • Pageable object collections (at server level)
  • Extensive support for retrieving aggregate values on collections (count, sum, average, ...)
  • Collections implement IBindingList so they can be used by controls (grids) as a data source
  • Underlying database engine uses optimized and parameterized SQL queries. SQL injection is impossible
  • Built specifically for .NET 2.0, taking full advantage of generics and nullable variables
  • Raw SQL and/or stored procedures can be called on the underlying database without the need for a separate database connection
  • Small footprint (less than 120 KB)

Forum

A discussion forum dedicated to CoolStorage.NET can be found at www.forum.activa.be

Blog

My blog can be found at www.blog.activa.be. I'll discuss CoolStorage.NET and other .NET related stuff.

Free?

Well, yes it's Open Source, but if you feel tempted to make a donation, feel free. Click Here x-click-but04.gif

Last edited May 29 at 11:02 PM by activa, version 14
Comments
dc wrote  Jun 13 2007 at 7:49 PM 
Great Job , by far the best use of generics I have come across. Simply Fantastic and the biggest usp is the usability , simplicity and sensibility it offers.

Althoug I am curious to see the "Typed raw SQL queries and stored procedures" documentation coming through.

I wonder if this beautiful product can be further made compatible with encapsulation of db objects ( e.g concept of views ) , as of now the focus is on the only database object -> TABLE . Its very common to pull data from the db where all of it is not coming from a single table but a few tables joined together.

In the above scenairo , it will be great to find a way to LAZY FETCH ( partially fetch the underlying objects ) a virtual entity ( i.e virtual entity = custom class --- encapsulating csobjects representing physical tables in the db ) where this entity need not be a physical table in the db.

My concern is to cover access to those legacy stored procs in the db which return data ( combining diff tables and columns + applying business logic ) resulting in calculated columns ( which do not represent a real db column of a real table )

activa wrote  Jun 14 2007 at 6:49 PM 
You can map a CSObject to a view. Just specify the view name in the [MapTo] attribute instead of a table name.
The documentation will be completed in the next few weeks.

TBPrince wrote  Jun 21 2007 at 11:57 AM 
Hello,

great job. I was not so fond of OR/M but I have to say CoolStorage is different. Very easy object mapping and extensive query ability make it the best OR/M I've ever seen.

Should I send a suggestion, I'd say that I'd like to be able to page dependent collections, besides being able to filter them. Anyway, it's a minor detail... great job again! ;-)

darren_kay wrote  Jun 28 2007 at 3:19 PM 
Was excited to see an ORM that supported DB2 (yes there is another database besides MS SQL and MySQL!). Downloaded it but can't see a provider, is this a feature to be delivered later or not planning to anymore?

After reading the pdf documentation I was impressed at how clean and simple you have designed this ORM. It does exactly what it needs to do without over complicating it, some ORMs require so much time to configure and map that they don't really save the developer any extra time or effort. Keep up the great work!

ps. Do you plan to setup a discussion forum for the project?

willford wrote  Jul 13 2007 at 4:23 PM 
I have been playing around with CoolStorage and think it is awesome. The only drawback I encountered, which I'm not sure if it is a problem or me not really grasping it, and it is ObjectDataSource binding.

I create business objects, like Customer, add a shared LoadAll() as (List of Customer) and am ready to go with the ObjectDataSources. When I tried to do the same with a CSObject, using it as the object class for the ObjectDataSource and the List() as the Select command, I get an error message.

What I have discovered, so far, is that when you create a Customer class descending from CSObject and then do c=customer.new(), you don't really get a Customer object, you get a descendant, so the c=new Customer() breaks down when the ObjectDataSource tries to bind.

Any ideas?

purplepangolin wrote  Aug 30 2007 at 8:35 AM 
Hello,

Looks nice. Do you have any plans to support Oracle?

AndrewPeters wrote  Nov 14 2007 at 4:06 AM 
Hi activa,

Looks like we've been developing two similar frameworks in parallel :-) Good work with CoolStorage and I'd love to get your feedback on our framework LightSpeed. :-)

Cheers,

Andrew.

Updating...