另一个数据访问层(c#.net 2.0)

时间:2009-04-22 15:05:43

标签: c# orm .net-2.0 data-access-layer

已实现我正在编写另一个代码生成器来为简单的ORM层执行sps / classes / interfaces等。这次大部分内容都在SQL中。我有一个通用的C#DAL用于调用sps /获得结果等。(花了我一个小时左右的时间并且很小)。

我确信现在有一种更简单的方法......是吗?

我对SQL很有信心/能够使用存储过程等 - 我不打算隐藏SQL,只是从编码填充/持久化对象中获取无聊的重复。我不是在学习一个模板化的语言/复杂的应用程序,或者是生成超级膨胀软件(或者建立在膨胀的MS库上的应用程序)。还必须能够从现有数据库开始。

它仍然是自己滚动的情况吗?真的?

.Net 2.0(Winforms)

编辑: 我不是完全反模板,如果它真的很简单/快速拿起。 理想情况下,解决方案对其他开发人员来说是小型的,免费的和不熟悉的。

4 个答案:

答案 0 :(得分:4)

看看BLToolkit

[TestFixture]
public class ExecuteObject
{
    public abstract class PersonAccessor : DataAccessor<Person>
    {
        // Here we explicitly specify a stored procedure name.
        //
        [SprocName("Person_SelectByKey")]
        public abstract Person GetByID(int @id);

        // SQL query text.
        //
        [SqlQuery("SELECT * FROM Person WHERE PersonID = @id")]
        public abstract Person GetPersonByID(int @id);

        // Specify action name.
        // Stored procedure name is generated based on convention
        // defined by DataAccessor.GetDefaultSpName method.
        //
        [ActionName("SelectByName")]
        public abstract Person GetPersonByName(string @firstName, string @lastName);

        // By default method name defines an action name
        // which is converted to a stored procedure name.
        // Default conversion rule is ObjectName_MethodName.
        // This method calls the Person_SelectByName stored procedure.
        //
        public abstract Person SelectByName(string @firstName, string @lastName);
    }

    [Test]
    public void Test()
    {
        PersonAccessor pa = DataAccessor.CreateInstance<PersonAccessor>();

        // ExecuteObject.
        //
        Assert.IsNotNull(pa.GetByID        (1));
        Assert.IsNotNull(pa.GetPersonByID  (2));
        Assert.IsNotNull(pa.GetPersonByName("Tester", "Testerson"));
        Assert.IsNotNull(pa.SelectByName   ("Tester", "Testerson"));
    }
}

答案 1 :(得分:2)

不直接回答你的问题。

阅读艾恩德的这篇精彩文章:25 Reasons Not To Write Your Own Object Relational Mapper

建议使用NHibernate。

答案 2 :(得分:1)

看看SubSonic。

答案 3 :(得分:0)

我喜欢nHibernate,我非常精通SQL;但是,我不喜欢为每张桌子写下至少四个触发器。对于我无法弄清楚如何使nHibernate做的事情。

你确实有很多代码生成器,但是如果你不想学习如何构建模板,并且对构建/社区模板不满意,那么你唯一的其他选择就是自己动手。