已实现我正在编写另一个代码生成器来为简单的ORM层执行sps / classes / interfaces等。这次大部分内容都在SQL中。我有一个通用的C#DAL用于调用sps /获得结果等。(花了我一个小时左右的时间并且很小)。
我确信现在有一种更简单的方法......是吗?
我对SQL很有信心/能够使用存储过程等 - 我不打算隐藏SQL,只是从编码填充/持久化对象中获取无聊的重复。我不是在学习一个模板化的语言/复杂的应用程序,或者是生成超级膨胀软件(或者建立在膨胀的MS库上的应用程序)。还必须能够从现有数据库开始。
它仍然是自己滚动的情况吗?真的?
.Net 2.0(Winforms)
编辑: 我不是完全反模板,如果它真的很简单/快速拿起。 理想情况下,解决方案对其他开发人员来说是小型的,免费的和不熟悉的。
答案 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)
答案 2 :(得分:1)
看看SubSonic。
答案 3 :(得分:0)
我喜欢nHibernate,我非常精通SQL;但是,我不喜欢为每张桌子写下至少四个触发器。对于我无法弄清楚如何使nHibernate做的事情。
你确实有很多代码生成器,但是如果你不想学习如何构建模板,并且对构建/社区模板不满意,那么你唯一的其他选择就是自己动手。