Je suis en train d'écrire un destiné aux bases de données embarquées mini-ORM sous licence BSD (avec prise en charge ese, SQLite et SQLCE hors de la boîte)conseils sur un modèle de conception ActiveRecord en C#
Après beaucoup de travail avec Rails dans la dernière année, j'ai pensé à implémenter un pattern Active Record en C#.
J'ai trouvé un code de démo et je me demandais si le design de l'interface était bon.
Ici, vous allez:
// 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);
}
}
Désolé à ce sujet étant un multiple questions dans une seule ... Pouvez-vous penser à toute modification de cette API? Y a-t-il des défauts fatals? Existe-t-il des ORM open source qui définissent des interfaces similaires?
téléchargera et un jeu, à première vue, je pense que la façon im propose de faire hasMany et Appartient est plus agréable ... –
Je dois également décider si une propriété ColumnInfo est nécessaire sur toutes les colonnes db et si j'ai vraiment besoin d'une propriété ActiveRecord sur la classe (semble redondante) –
Castle AR ne prend pas en charge ESE cause nhibernate ne prendra jamais en charge ESE, dans un scénario incorporé ESE a un surcoût de seulement 80K pour la redistribution qui est incroyable –