Gentle.NET lets you work with relational databases without using SQL directly.
See this basic example from the Gentle.NET user guide. I have converted it to boo below.
Gentle.NET is an object-relational mapper (ORM). ORMs translate your classes and objects into SQL commands for storing those objects and retrieving them from a relational database.
How to Use
Use a relational database engine (be it Firebird, MySQL, MSSQL, etc.) to design your tables (see Database Design), and then create the classes that correspond to those tables.
You can also use the free MyGeneration code generation tool to generate those Gentle.NET classes for you automatically (in C#, which you can then convert to boo using SharpDevelop).
Another Alternative: NHibernate
See the NHibernate page for a recipe using the NHibernate ORM. Being based on an existing Java tool, NHibernate probably has or will have a larger user base than Gentle.NET. But so far I like how Gentle.NET uses [attributes] instead of XML to define the mappings between objects and the database (see the example below, although you still need to create a general XML configuration file with info like the connection string).
Gentle.NET Code Sample
I have been experimenting with using Firebird, MyGeneration, and Gentle.NET with boo. I'll post some examples later.
This sample code has not yet been tested, but is provided for illustration:
[TableName()] class User(Persistent): _userId as int _userName as string def constructor(userName as string): self(0, userName) def constructor(userId as int, userName as string): _userId = userId _userName = userName static def Retrieve(userId as int) as User: key = Key(typeof(User), true, 'Id', userId) return Broker.RetrieveInstance(typeof(User), key) as User [TableColumn('UserId'), PrimaryKey(AutoGenerated: true)] Id as int: get: return _userId set: _userId = value [TableColumn(NotNull: true)] Name as string: get: return _userName set: _userName = value //example usage: ford = User( "Ford Prefect" ) ford.Persist() // save the new user and assign an id value prefect = User.Retrieve( ford.Id ) // retrieve the existing user
Go back to Database Recipes.