2009-04-22 4 views
1

Реализовано Я пишу еще один генератор кода для создания sps/classes/interfaces и т. Д. Для простого слоя ORM. На этот раз большая часть кишок находится в SQL. У меня есть C# DAL общего назначения для вызова sps/получения результатов и т. Д. (Взял меня на час или около того и стал крошечным).еще один уровень доступа к данным (C# .net 2.0)

Я думал наверняка, что будет более простой путь к настоящему времени ... есть?

Я уверен/компетентен с SQL и использую хранимые procs и т. Д. - Я не хочу скрываться от SQL, просто выньте скучное повторение из кодирования для заполнения/сохранения объектов. Я не изучаю язык шаблонов/сложное приложение или приложения, которые производят мега-bloatware (или строят на bloaty MS-библиотеках). Также должна быть возможность начать с существующей базы данных.

Это все еще случай с рулонами? В самом деле?

.Net 2.0 (Winforms)

EDIT: Я не совсем анти-шаблон, если это действительно просто/быстро подобрать. В идеале, решение было бы небольшим, бесплатным и нежным для других разработчиков.

+0

http://stackoverflow.com/questions/672020/simple-crud-generator-for-c –

ответ

0

Мне нравится nHibernate, я очень разбираюсь в SQL; однако мне не нравится писать минимум четыре procs для каждой таблицы. Для вещей, которые я не могу понять, как сделать nHibernate.

У вас есть много генераторов кода, но если вы не хотите изучать, как создавать шаблон, и вас не устраивают встроенные шаблоны, то ваш единственный вариант - ,

2

Непосредственно отвечая на вопрос, так.

Прочитайте этот большой пост по Ayende: 25 Reasons Not To Write Your Own Object Relational Mapper

рекомендуется использовать NHibernate.

+0

+1 за ссылку, не видел эту статью раньше. –

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")); 
    } 
} 
Смежные вопросы