Take the 2-minute tour ×

I'm in the process of writing a BSD licensed mini-ORM targeted at embedded databases (with support for ese, sqlite and sqlce out of the box)

After working lots with Rails in the last year I have been thinking of implementing an Active Record pattern in C#.

I have come up with some demo code and was wondering if the interface design is sound.

Here you go:

// first param is the class, second is the primary key
public class Order : ActiveRecord<Order,int> {
    BelongsTo<Customer> Customer { get; set; }

    public int Id { get; set; }

    public string Details { get; set; }

[Index("FirstName", "LastName")]
[Index("LastName", "FirstName")] 
public class Customer : ActiveRecord<Customer,int> 

    public HasMany<Order> Orders { get; set; }

    public int Id { get; set; }

    [ColumnInfo(MinLength=4, MaxLength=255, Nullable=false)]
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Comments { get; set; }

public class TestActiveRecord {

    public void Demo() 
        var customer = Customer.Build();
        customer.FirstName = "bob";
        customer.LastName = "doe";

        var order = customer.Orders.Build();
        order.Details = "This is the first order"; 

        var customer2 = Customer.Find(customer.Id);

        Assert.AreEqual(1, customer2.Orders.Count); 

Sorry about this being a multiple questions in one question ... Can you think of any changes to this API? Are there any fatal flaws? Are there any open source ORMs that define similar interfaces?

share|improve this question
add comment

3 Answers

up vote 3 down vote accepted

The Castle Active Record Project.

Although it's not a strict implementation of the Active Record pattern, it works very well. Bonus is you will get some experience with NHibernate in the process.

As someone who has written his own, very simple, OR/M only to find it lacking when scenarios got more complex, I would strongly urge you to take a hard look at Caste ActiveRecord and NHibernate, unless you are doing this as a learning experience.

share|improve this answer
Will download and have a play, at first glance I think the way im proposing to do HasMany and BelongsTo is nicer ... –  Sam Saffron Feb 11 '09 at 6:52
I also need to decide if I should require a ColumnInfo property on all db columns and if I really need an ActiveRecord property on the class (seems redundent) –  Sam Saffron Feb 11 '09 at 6:54
Castle AR will not support ESE cause nhibernate will never support ESE, in an embedded scenario ESE has an overhead of only 80K for the redistribution which is amazing –  Sam Saffron Feb 11 '09 at 6:57
I'm not a fan of any persistence framework that forces you to polute your inheritance heirachy. –  RKitson Feb 11 '09 at 6:57
Any suggestion on how this can be done without polluting the hierarchy, whilst keeping the API simple? –  Sam Saffron Feb 11 '09 at 6:59
show 7 more comments


Create a repository class that inherits from this AR class. Then you don't break your hierarchy and you implement a repository pattern along with your AR pattern!

share|improve this answer
add comment

Could someone possibly provide code to a very simple activerecord class that I could use to learn with? Looking at the source on projects like Castle and SubSonic is a bit overwhelming. I'd like to learn the active record pattern to get an idea of how it works. I know whatever I build would be nothing compared to Castle or SubSonic, but I think the learning experience would be great.

I looked at Hayden ActiveRecord, but I can't seem to find the source. Most of the active record related postings on his site are quite old.


Edit: Sorry, I should have created a new question for this...

share|improve this answer
add comment

Your Answer


