65.9K
CodeProject 正在变化。 阅读更多。
Home

使用属性持久化对象

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.94/5 (7投票s)

2005年6月16日

2分钟阅读

viewsIcon

45252

downloadIcon

305

无需编写 ADO.NET 代码即可实现对象的持久化和填充。

引言

最近我一直在研究简化个人项目中的服务器端数据访问代码,这促使我阅读了一些声明式编程原则。解释声明式编程的原则超出了本文的范围,但简而言之,它意味着声明而不是编写大量的代码。

实现

我没有使用传统的 O/R 映射器,而是构建了一个类库,其中包含用于声明域对象和存储过程之间关系的属性。域对象应该派生自一个基类,该基类实现了两种方法:“Persist”和“Populate”。这些方法用于解析属性并持久化或填充对象。

一个实现属性的对象的示例

[PersistableObject("SetObject", false, "GetObject")]
public class DataObject : PersistableObjectBase
{
    private int mID;
    private string mName;
    private bool mActive;

    public DataObject() {}
    [PersistableProperty("UserID", PersistablePropertyDatatypes.Int, 
                                   PersistablePropertyTypes.Key)]
    public int ID
    {
       get { return mID; }
       set { mID = value; }
    }
    [PersistableProperty("UserName", PersistablePropertyDatatypes.NVarchar, 
                                     PersistablePropertyTypes.Field, 50)]
    public string Name
    {
       get { return mName; }
       set { mName = value; }
    }
    [PersistableProperty("Active", PersistablePropertyDatatypes.Bit, 
                                   PersistablePropertyTypes.Field)]
    public bool Active
    {
       get { return mActive; }
       set { mActive = value; }
    }
}

此对象派生自“PersistableObjectBase”,因此您现在可以调用“Persist”方法将对象持久化到数据库中。调用“Persist”方法时,将使用反射来解析属性,并通过常规 ADO.NET 调用顶部属性“SetObject”中声明的存储过程。所有这些现在都将在后台发生。您不必再为该对象编写 ADO.NET 代码,除非您必须执行一些非常特殊的操作。请注意,您仍然必须为 INSERT / UPDATESELECT 编写存储过程。 尚不支持删除对象,但将在以后的版本中实现。

程序集按原样提供,使用它需要您自担风险,但请随意下载并试用。 我需要对此提供所有反馈,因此如果您对如何改进它有一些想法,请与我联系。

下一步

为了改进程序集的使用,将来必须实现以下内容

  • 删除数据库中的对象。
  • 基准性能测试。
© . All rights reserved.