我正在编写针对嵌入式数据库的BSD许可迷你ORM(支持ese,sqlite和sqlce开箱即用)
在去年使用Rails工作之后,我一直在考虑在C#中实现Active Record模式。
我想出了一些演示代码,并想知道界面设计是否合理。
你走了:
// 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?
答案 0 :(得分:3)
虽然它不是Active Record模式的严格实现,但它的效果非常好。奖金是你将在这个过程中获得NHibernate的一些经验。
作为一个自己编写的人,非常简单,OR / M只是在场景变得更复杂时才发现它缺乏,我强烈建议你仔细看看Caste ActiveRecord和NHibernate,除非你这样做学习经历。
答案 1 :(得分:0)
ActiveRecordMediator
创建一个继承自此AR类的存储库类。然后,您不会破坏您的层次结构,而是实现存储库模式以及您的AR模式!
答案 2 :(得分:0)
有人可能会为我可以用来学习的非常简单的activerecord类提供代码吗?看看Castle和SubSonic等项目的来源有点压倒性。我想学习积极的记录模式,以了解它是如何工作的。我知道无论我建造什么都没有比Castle或SubSonic更好,但我认为学习经验会很棒。
我看了Hayden ActiveRecord,但我似乎无法找到源头。他网站上大多数与活动记录相关的帖子都很老了。
感谢。
编辑: 对不起,我应该为此创建一个新问题......