еще один уровень доступа к данным (c # .net 2.0) - PullRequest
1 голос
/ 22 апреля 2009

Понял, я пишу еще один генератор кода, чтобы сделать SPS / классы / интерфейсы и т.д. для простого уровня ORM. На этот раз большинство кишок в SQL. У меня есть универсальный C # DAL для вызова sps / получения результатов и т. Д. (Это заняло у меня около часа или около того и крошечно).

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

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

Это все еще случай, когда вы сами катитесь? Действительно?

.Net 2.0 (Winforms)

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

Ответы [ 4 ]

4 голосов
/ 22 апреля 2009

Взгляните на 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"));
    }
}
2 голосов
/ 22 апреля 2009

Непосредственно не отвечаю на ваш вопрос.

Прочтите этот великий пост Айенде: 25 причин, по которым не нужно писать свой объект. Реляционный картограф

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

1 голос
/ 22 апреля 2009

Посмотрите на SubSonic.

0 голосов
/ 22 апреля 2009

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

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

...