Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于C语言中ActiveRecord设计模式的建议#_C#_Design Patterns_Api - Fatal编程技术网

C# 关于C语言中ActiveRecord设计模式的建议#

C# 关于C语言中ActiveRecord设计模式的建议#,c#,design-patterns,api,C#,Design Patterns,Api,我正在编写一个BSD许可的小型ORM,目标是嵌入式数据库(支持ese、sqlite和sqlce开箱即用) 在去年与Rails进行了大量工作之后,我一直在考虑在C#中实现一个活动记录模式 我已经拿出了一些演示代码,想知道界面设计是否合理 给你: // first param is the class, second is the primary key public class Order : ActiveRecord<Order,int> { BelongsTo<Cus

我正在编写一个BSD许可的小型ORM,目标是嵌入式数据库(支持ese、sqlite和sqlce开箱即用)

在去年与Rails进行了大量工作之后,我一直在考虑在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); 
    }
 }
//第一个参数是类,第二个是主键
公共类命令:ActiveRecord{
BelongsTo客户{get;set;}
[主密钥(自动增量=真)]
公共int Id{get;set;}
公共字符串详细信息{get;set;}
} 
[索引(“名字”、“姓氏”)]
[索引(“姓氏”、“名”)]
公共类客户:ActiveRecord
{
public有许多命令{get;set;}
[主密钥(自动增量=真)]
公共int Id{get;set;}
[ColumnInfo(MinLength=4,MaxLength=255,Nullable=false)]
公共字符串名{get;set;}
[ColumnInfo(MinLength=4,MaxLength=255,Nullable=false)]
公共字符串LastName{get;set;}
公共字符串注释{get;set;}
}
[测试类]
公共类测试记录{
公共空间演示()
{
var customer=customer.Build();
customer.FirstName=“bob”;
customer.LastName=“doe”;
var order=customer.Orders.Build();
order.Details=“这是第一张订单”;
customer.Save();
var customer2=Customer.Find(Customer.Id);
Assert.AreEqual(1,customer2.Orders.Count);
}
}
很抱歉,这是一个问题中的多个问题。。。 你能想到这个API有什么变化吗?有什么致命的缺陷吗?有没有定义类似接口的开源ORM

这个项目

虽然它不是活动记录模式的严格实现,但它工作得非常好。额外的好处是,在此过程中,您将获得一些NHibernate的经验

作为一个写过自己的,非常简单的,或者说/M的人,当场景变得更复杂时,才发现它是缺乏的,我强烈建议你仔细看看Caste ActiveRecord和NHibernate,除非你是作为一种学习经验来做的。

ActiveRecordMediator


创建从该AR类继承的存储库类。然后,您就不会破坏您的层次结构,而是将存储库模式与AR模式一起实现

有没有人可以为我可以用来学习的非常简单的activerecord类提供代码?在Castle和SubSonic等项目中查看源代码有点让人难以接受。我想学习活动记录模式,了解它是如何工作的。我知道我建造的任何东西都比不上城堡或亚音速,但我认为学习经验会很棒

我看了海登的动态记录,但似乎找不到来源。他的网站上大多数与活动记录相关的帖子都很旧

谢谢

编辑:
对不起,我应该为此创建一个新问题

将下载并播放,乍一看,我认为我建议的方式有很多和其他更好…我还需要决定我是否应该在所有db列上要求ColumnInfo属性,如果我真的需要类上的ActiveRecord属性(似乎是redundent),Castle AR将不支持ESE,因为nhibernate将永远不支持ESE,在嵌入式场景中,ESE的再分配开销仅为80K,这令人惊讶。我不喜欢任何强迫您解决继承继承继承问题的持久化框架。有没有建议如何做到这一点而不污染层次结构,同时保持API的简单性?