Я нахожусь в процессе написания лицензированного BSD mini-ORM для встроенных баз данных (с поддержкой ese, sqlite и sqlce из коробки)
После многолетней работы с Rails я думал о реализации шаблона Active Record в C #.
Я придумал демо-код и подумал, а дизайн интерфейса - звуковой.
Вот, пожалуйста,
// first param is the class, second is the primary key
public class Order : ActiveRecord<Order,int> {
BelongsTo<Customer> Customer { get; set; }
[PrimaryKey(AutoIncrement=true)]
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; }
[PrimaryKey(AutoIncrement=true)]
public int Id { get; set; }
[ColumnInfo(MinLength=4, MaxLength=255, Nullable=false)]
public string FirstName { get; set; }
[ColumnInfo(MinLength=4, MaxLength=255, Nullable=false)]
public string LastName { get; set; }
public string Comments { get; set; }
}
[TestClass]
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";
customer.Save();
var customer2 = Customer.Find(customer.Id);
Assert.AreEqual(1, customer2.Orders.Count);
}
}
Извините, что это несколько вопросов в одном вопросе ...
Можете ли вы вспомнить какие-либо изменения в этом API? Есть ли фатальные недостатки? Существуют ли ORM с открытым исходным кодом, которые определяют подобные интерфейсы?