1

意识到我正在编写另一个代码生成器来为简单的 ORM 层执行 sps/classes/interfaces 等。这次大部分胆量都在SQL中。我有一个通用的 C# DAL 用于调用 sps/获取结果等(花了我一个小时左右,而且很小)。

我认为现在肯定会有更简单的方法......有吗?

我对 SQL 充满信心/胜任并使用存储过程等 - 我不想隐藏 SQL,只是将无聊的重复从用于填充/持久对象的编码中解脱出来。我不喜欢学习模板语言/复杂的应用程序,或产生巨型膨胀软件(或建立在膨胀的 MS 库上)的应用程序。还必须能够从现有数据库开始。

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

.Net 2.0 (Winforms)

编辑:我并不完全反对模板,如果它真的很简单/快速上手的话。理想情况下,解决方案应该是小型的、免费的并且对其他开发人员来说并不可怕。

4

4 回答 4

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"));
    }
}
于 2009-04-22T15:16:24.037 回答
2

不直接回答你的问题。

阅读 Ayende 的这篇精彩文章:不编写自己的对象关系映射器的 25 个理由

推荐使用 NHibernate。

于 2009-04-22T15:11:00.120 回答
1

看看亚音速。

于 2009-04-22T15:10:46.017 回答
0

我喜欢nHibernate,我非常精通SQL;但是,我喜欢不必为每个表编写至少四个 proc。对于我不知道如何让 nHibernate 做的事情。

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

于 2009-04-22T15:10:11.993 回答