Я нахожусь в процессе написания BSD лицензированного мини-ORM ориентированы на встроенных баз данных (с поддержкой ESE, SQLite и SQLCE из коробки)Рекомендации по шаблону проектирования ActiveRecord в C#
После рабочих партий с 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 с открытым исходным кодом, которые определяют аналогичные интерфейсы?
загрузит и иметь люфт, на первый взгляд, я думаю, как им предлагают сделать HasMany и BelongsTo приятнее ... –
Мне также нужно решить, следует ли мне требовать свойство ColumnInfo во всех столбцах db и если мне действительно нужно свойство ActiveRecord в классе (кажется, лишний) –
Замок AR не будет поддерживать ESE-причину nhibernate никогда не будет поддерживать ESE во встроенном сценарии ESE имеет накладные расходы всего лишь на 80 тыс. Для перераспределения, которое удивительно. –