powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Доступ к данным
25 сообщений из 39, страница 1 из 2
Доступ к данным
    #35232014
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Data Access Layer
разрабатываю открытый проэкт доступа к данным , всё построенно на ООП , БД описываеться в виде классов , после чего имееться возможность полноценной работы с бд (управление соединением , транзакциями , выполнение процедур, комманд, получение данных и т.д.) , количество кода сводиться к минимуму при совпадении названий в БД и в программе. Все кому интересно пишите свои предложения и пожелания
...
Рейтинг: 0 / 0
Доступ к данным
    #35232063
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие подобные проекты смотрели и чем они не устроили?
...
Рейтинг: 0 / 0
Доступ к данным
    #35232210
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смотрел несколько проэктов , если делаю что то своё то наверно что то не устроило в других , причины есть разные , одни проэкты платные в других закрыты коды и изменить ничего не можеш в третьих писать кучу кода в четвёртых нет каких то возможностей в пятых хуже быстродействие и т.д. вобщем везде есть недостатки и в том что я делю думаю найдуться но всё же удобного мне DAL-а не встречал поэтому приходиться писать свой ,

на будущее пожалуйста пржде чем судить скачайте посмотрите попробуйте , потом критикуйте только без грязи и спама а конкретно что где не так (если можно как это исправить ) что добавить и т.д.
...
Рейтинг: 0 / 0
Доступ к данным
    #35232441
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-offсмотрел несколько проэктов
И все же -- какие именно?
dim-on-smirn-off
, если делаю что то своё то наверно что то не устроило в других , причины есть разные , одни проэкты платные в других закрыты коды и изменить ничего не можеш в третьих писать кучу кода в четвёртых нет каких то возможностей в пятых хуже быстродействие и т.д. вобщем везде есть недостатки и в том что я делю думаю найдуться но всё же удобного мне DAL-а не встречал поэтому приходиться писать свой ,
Вы, надеюсь, понимаете, что прежде чем садиться писать свой велосипед с квадратными колесами (чем, сказать честно, ваши 600+ строк кода и являются), стоит ознакомиться с широким ассортиментом ORM и RSM-средств различных степеней сложности, открытости, скорости, бесплатности и фичастости.
dim-on-smirn-off
на будущее пожалуйста пржде чем судить скачайте посмотрите попробуйте , потом критикуйте только без грязи и спама а конкретно что где не так (если можно как это исправить ) что добавить и т.д.
Если вы настаиваете, то извольте. Но я тут даже не знаю, с какого конца подступиться...

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

Во-вторых, вообще непонятно позиционирование вашей библиотеки. Она, насколько я могу судить по коду, задумывалась исключительно для работы с хранимыми процедурами? Зачем же тогда описывать таблицы (public class Table<TEntity>) ? Кроме того, зачем мне для каждой хранимой процедуры сочинять отдельный класс?

В-третьих, какие из этих терминов вам знакомы: Identity Map, Unit of Work, Metadata Mapping, Identity Field?

В-четвертых, вы жестко прибили ваш DAL к SQL Server'у.

В-пятых, про быстродействие можете больше даже не заикаться: у вас безумное количество вызовов CreateInstance(), GetValue() и SetValue() -- а это самые дорогие операции. Ну и не говоря уже о постоянном дергании GetCustomAttributes().

Ну вот. И это только по верхам...
...
Рейтинг: 0 / 0
Доступ к данным
    #35232517
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насколько я могу судить по коду, задумывалась исключительно для работы с хранимыми процедурами ошибочка :) можно и sql писать


Зачем же тогда описывать таблицы (public class Table<TEntity>) ? Кроме того, зачем мне для каждой хранимой процедуры сочинять отдельный класс?


TEntity указываеться потому как в Table имееться сразу методы для получения изменения данных и т.д.



В-четвертых, вы жестко прибили ваш DAL к SQL Server'у. я его туда не прибивал какой провайдер в конфиге будет тот и будет юзаться

В-пятых, про быстродействие можете больше даже не заикаться: у вас безумное количество вызовов CreateInstance(), GetValue() и SetValue() -- а это самые дорогие операции. Ну и не говоря уже о постоянном дергании GetCustomAttributes().


быстродействие необязательно искать там :) , есть другие места где в других далах тратяться ресурсы ... по быстродействию сравнивал с Web Service Software Factory там у меня было в несколько раз приимущество.


Вы, надеюсь, понимаете, что прежде чем садиться писать свой велосипед с квадратными колесами (чем, сказать честно, ваши 600+ строк кода и являются), стоит ознакомиться с широким ассортиментом ORM и RSM-средств различных степеней сложности, открытости, скорости, бесплатности и фичастости.


эти 600 строк написанны в один день собственно поэтому могут и казаться вам квадратными, чем раньше начнёш что то делать тем больше сделаеш я начал недавно писать этот дал и думаю впереди достаточно времени для совершенствования ....


P.S.
если хотите сделать доброе дело то наставте меня на путь истенный и покажите мне бесплатный гибкий простой ДАЛ. с удовольствием буду юзать если сочту что вы правы
...
Рейтинг: 0 / 0
Доступ к данным
    #35232545
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сории забыл отвтетить
Кроме того, зачем мне для каждой хранимой процедуры сочинять отдельный класс
это делаеться для того чтобы знать сегнатуру процедуры при вызове , сейчас работаю над этим вопросом хотя не уверен что нужно что то менять . кстати есть визард который весь дал генерит автоматом так что количество процедур не играет роли
...
Рейтинг: 0 / 0
Доступ к данным
    #35232602
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-offошибочка :) можно и sql писать
Прям в коде?
dim-on-smirn-off
TEntity указываеться потому как в Table имееться сразу методы для получения изменения данных и т.д.
И зачем для этих целей описывать таблицу?

dim-on-smirn-off я его туда не прибивал какой провайдер в конфиге будет тот и будет юзаться
А это что?
Код: plaintext
1.
2.
3.
4.
5.
                if(string.IsNullOrEmpty(f.Attribute.ParametrName))
                    param.ParameterName = "@" + f.FieldInfo.Name;
                else
                    param.ParameterName = "@" + f.Attribute.ParametrName;


dim-on-smirn-off
быстродействие необязательно искать там :) , есть другие места где в других далах тратяться ресурсы
Тогда расскажите, где искать и где что тратится.
dim-on-smirn-off
... по быстродействию сравнивал с Web Service Software Factory там у меня было в несколько раз приимущество.
Энто где весь DAL на датасетах? И прям таки в несколько раз?
dim-on-smirn-off
эти 600 строк написанны в один день собственно поэтому могут и казаться вам квадратными, чем раньше начнёш что то делать тем больше сделаеш я начал недавно писать этот дал и думаю впереди достаточно времени для совершенствования ....
Советую выкинуть, осмотреться, и если уж так хочется, с учетом увиденного сделать более качественную вещь.
dim-on-smirn-off
если хотите сделать доброе дело то наставте меня на путь истенный и покажите мне бесплатный гибкий простой ДАЛ. с удовольствием буду юзать если сочту что вы правы
Повторяю вопрос -- какие вы уже смотрели?
...
Рейтинг: 0 / 0
Доступ к данным
    #35232607
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-offэто делаеться для того чтобы знать сегнатуру процедуры при вызове , сейчас работаю над этим вопросом хотя не уверен что нужно что то менять . кстати есть визард который весь дал генерит автоматом так что количество процедур не играет роли
Вообще нелепость. Параметры, в принципе, derive'атся -- да и опять же, можно пойти от обратного.
...
Рейтинг: 0 / 0
Доступ к данным
    #35232663
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прям в коде?

прямо в коде

[SQL("select * from test where ID = @ID")
TestSQL : StoredProcedure
{
public Guid ID;
}

что то вроде этого , хотя StoredProcedure стоило больше назвать Command или в этом духе потому как он и просто SQL может пользовать

И зачем для этих целей описывать таблицу?

для этих целей потомму что в этом классе как раз будут содержаться методы по работе с таблицой как я уже писал существуют предопределённые , можно создаваать свои


А это что?
в чём проблемма ?


И прям таки в несколько раз?
таки да


Советую выкинуть, осмотреться, и если уж так хочется, с учетом увиденного сделать более качественную вещь.
может больше такого совета не давать (бесполезно) , я просил конкретное название


Повторяю вопрос -- какие вы уже смотрели? названия не особо запоминаю тго что мне не нравиться , повторяю вопрос скажите что вы считаете нужно пользовать конкретно НАЗВАНИЕ



Вообще нелепость. Параметры, в принципе, derive'атся -- да и опять же, можно пойти от обратного.
и как их потом указывать ??
что то типа Parametr.Add("ID",Value)
или лучше всётаки sp.ID = Value , в таком виде вы никогда не допустите ошибку в названии параметра и легко сможете его переименовать
...
Рейтинг: 0 / 0
Доступ к данным
    #35232676
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Энто где весь DAL на датасетах? И прям таки в несколько раз?
кстати там нет DataSet ов там данные из DataReader мапяться в Entity
...
Рейтинг: 0 / 0
Доступ к данным
    #35232708
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-offпрямо в коде
Очень плохо.

dim-on-smirn-offв чём проблемма ?
Проблема в том, что, например, в Оракле префикс для именованных параметров -- символ двоеточия (":") а не "@".

dim-on-smirn-offназвания не особо запоминаю тго что мне не нравиться , повторяю вопрос скажите что вы считаете нужно пользовать конкретно НАЗВАНИЕ

Из чего я делаю вывод, что ничего вы не смотрели. Конкретно название -- BLToolkit, NHibernate, iBATIS.NET.

dim-on-smirn-off
и как их потом указывать ??
что то типа Parametr.Add("ID",Value)
или лучше всётаки sp.ID = Value , в таком виде вы никогда не допустите ошибку в названии параметра и легко сможете его переименовать
Нет, что-то типа:
Код: plaintext
1.
2.
[StoredProcedure("User_GetUserByLogin")]
public abstract User GetUserByLogin(string @login);
...
Рейтинг: 0 / 0
Доступ к данным
    #35232756
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том, что, например, в Оракле префикс для именованных параметров -- символ двоеточия (":") а не "@".


это можно вынести в конфиг , также как и SQL код


[StoredProcedure("User_GetUserByLogin")]
public abstract User GetUserByLogin(string @login);




при описании метода вы делеаете тоже самое что и я при описании процедуры, вопрос
как в таком случае задать имя параметра процедуры и тип параметра In или Out


немного рассматривал BLToolkit, NHibernate скажу сразу что последний требует много времени для изучения


как я уже говорил что недостатки можно найти везде
...
Рейтинг: 0 / 0
Доступ к данным
    #35232782
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-offэто можно вынести в конфиг , также как и SQL код
Это уже сделано? Можно-то много чего.
dim-on-smirn-off
при описании метода вы делеаете тоже самое что и я при описании процедуры
Сравните добавление одного класса с отдельным полем на каждый параметр хранимки и определение одного метода.
dim-on-smirn-off
как в таком случае задать имя параметра процедуры
Совпадает с названием параметра функции.
dim-on-smirn-off
и тип параметра In или Out
По умолчанию -- in. Модификатор "out" для формальных параметров вам знаком?
dim-on-smirn-offнемного рассматривал BLToolkit
И чем не угодил?
dim-on-smirn-off
, NHibernate скажу сразу что последний требует много времени для изучения
Добро пожаловать в Castle.ActiveRecord.
dim-on-smirn-offкак я уже говорил что недостатки можно найти везде
Ни одного так и не услышал.
...
Рейтинг: 0 / 0
Доступ к данным
    #35232960
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сравните добавление одного класса с отдельным полем на каждый параметр хранимки и определение одного метода.


на каждый параметр создаёться поле а не класс
public class User:StoredProcedure
{
[InParametr] public Guid ID;
[InParametr] public string Name;
[InParametr] public string Desc;
}
или

[StoredProcedure("User_GetUserByLogin")]
public abstract User GetUserByLogin
(
Guid @ID,
string @Name,
string @Desc
);


не вижу большой разницы , кстати где задать значение по умолчанию(не путать со значением поумолчанию в процедуре представим что процедура системная и изменить её нельзя)



По умолчанию -- in. Модификатор "out" для формальных параметров вам знаком?
очень даже , вопрос как быть в том случае если я хочу метод который принимает out парметр а процедура онного не имеет ?


кстати как быть если я хочу передать в метод объект например сделать
public void Save(User u); ?


в моём случае он есть сразу думаю у вас тоже но если нужно сделать свой метод то как быть ?
сразу привожу пример


public class sp_Use_Saver:StoredProcedure
{
[InParametr] public Guid ID;
[InParametr] public string Name;
[InParametr] public string Desc;
}

public void Save(User u)
{
db.ExecuteSP(typeof(sp_Use_Saver),u);
}


кстати где в вашем случае описываеться маппинг ? я так подозреваю в Entity то ещё вопрос как быть если у меня есть таблица Users где поле UserID и есть например View там тоже поле но уже просто ID как мне его промапить в одно и тоже Entity ????
...
Рейтинг: 0 / 0
Доступ к данным
    #35232965
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати ещё не услышал как можно задать имя параметра если оно отличаеться от имени параметра в процедуре ??
...
Рейтинг: 0 / 0
Доступ к данным
    #35232975
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-off Проблема в том, что, например, в Оракле префикс для именованных параметров -- символ двоеточия (":") а не "@".


это можно вынести в конфиг , также как и SQL код



Хм, а у OleDB провайдера вообще именованых параметров нет. Тоже в конфиг? :)
...
Рейтинг: 0 / 0
Доступ к данным
    #35232987
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм, а у OleDB провайдера вообще именованых параметров нет. Тоже в конфиг? :)

немного не понял суть если можно на небольшом примере
...
Рейтинг: 0 / 0
Доступ к данным
    #35233008
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-off Хм, а у OleDB провайдера вообще именованых параметров нет. Тоже в конфиг? :)

немного не понял суть если можно на небольшом примере

MSDN:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public void CreateMyOleDbCommand(OleDbConnection connection,
    string queryString, OleDbParameter[] parameters) 
{
    OleDbCommand command = new OleDbCommand(queryString, connection);
    command.CommandText = 
        "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
    command.Parameters.Add(parameters);

    for (int j= 0 ; j<parameters.Length; j++)
    {
        command.Parameters.Add(parameters[j]) ;
    }

    string message = "";
    for (int i =  0 ; i < command.Parameters.Count; i++) 
    {
        message += command.Parameters[i].ToString() + "\n";
    }
    Console.WriteLine(message);
}


...
Рейтинг: 0 / 0
Доступ к данным
    #35233025
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-off
на каждый параметр создаёться поле а не класс
Я это понял. Но по классу на каждую хранимку (а в классе кроме полей должны быть еще и конструкторы, для более-менее удобной работы) -- это перебор.
dim-on-smirn-off
[StoredProcedure("User_GetUserByLogin")]
public abstract User GetUserByLogin
(
Guid @ID,
string @Name,
string @Desc
);
Это что было? Данный метод в моем варианте вызывает хранимку User_GetUserByLogin, передает ей параметр login и возвращает объект класса User. А вы чего наворотили?
dim-on-smirn-offне вижу большой разницы
А я вижу.
dim-on-smirn-off
, кстати где задать значение по умолчанию(не путать со значением поумолчанию в процедуре представим что процедура системная и изменить её нельзя)
Методы можно перегружать. Вот в перегрузках хоть обзадавайтесь.
dim-on-smirn-offвопрос как быть в том случае если я хочу метод который принимает out парметр а процедура онного не имеет ?
Мы об одном и том же говорим? Я, например, об уровне доступа к данным. Но уж если так хочется, то всегда можно сделать перегруженный метод и в нем играться с параметрами как душе угодно.
dim-on-smirn-off
кстати как быть если я хочу передать в метод объект например сделать
public void Save(User u); ?
в моём случае он есть сразу думаю у вас тоже но если нужно сделать свой метод то как быть ?
сразу привожу пример
Одна строчка моего кода против ваших десяти:
Код: plaintext
new SqlQuery<User>().Insert(db, u);
dim-on-smirn-off
кстати где в вашем случае описываеться маппинг ?
Где хотите. В коде, в XML-файле, в INI-файле...
dim-on-smirn-off
я так подозреваю в Entity то ещё вопрос как быть если у меня есть таблица Users где поле UserID и есть например View там тоже поле но уже просто ID как мне его промапить в одно и тоже Entity ????
Как угодно.
dim-on-smirn-offкстати ещё не услышал как можно задать имя параметра если оно отличаеться от имени параметра в процедуре ??
Что-то очень много вопросов, вам не кажется? Вы, помнится, просили покритиковать и оценить. Но уж если "отличаеться", то опять перегружайте метод и всё.
...
Рейтинг: 0 / 0
Доступ к данным
    #35233041
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
public void CreateMyOleDbCommand(OleDbConnection connection,
string queryString, OleDbParameter[] parameters)
{
OleDbCommand command = new OleDbCommand(queryString, connection);
command.CommandText =
"SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
command.Parameters.Add(parameters);

for (int j=0; j<parameters.Length; j++)
{
command.Parameters.Add(parameters[j]) ;
}

string message = "";
for (int i = 0; i < command.Parameters.Count; i++)
{
message += command.Parameters .ToString() + "\n";
}
Console.WriteLine(message);
}




я уже писал

[SQL("select * from test where ID = @ID")
TestSQL : StoredProcedure
{
public Guid ID;
}
будет работать потму как перед выполнением команды SQL @ID заменяеться значением . с бинарным полем правда не прокатит... думаю найду решение (спасибо за подсказку) на самом деле задумываеться как DAL SQL Server 2005 а потдержка других баз не есть приоритет и делаеться по возможности , но всё же буду исправляться :)
...
Рейтинг: 0 / 0
Доступ к данным
    #35233079
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dim-on-smirn-off

я уже писал

[SQL("select * from test where ID = @ID")
TestSQL : StoredProcedure
{
public Guid ID;
}
будет работать потму как перед выполнением команды SQL @ID заменяеться значением .

То есть, на сервер у вас отправляется не параметризованный запрос, а сконктатенированная строка, правильно я понимаю?
...
Рейтинг: 0 / 0
Доступ к данным
    #35233084
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это что было? Данный метод в моем варианте вызывает хранимку User_GetUserByLogin, передает ей параметр login и возвращает объект класса User. А вы чего наворотили?
извеняюсь имя нужно изменить :) просто скопировал с примера и не аккуратно исправил


Методы можно перегружать. Вот в перегрузках хоть обзадавайтесь.


да только на каждый параметр нужна перегрузка если их 10 ?? , и могут быть произвольно заданы те или инные сколько вариантов ??




Одна строчка моего кода против ваших десяти: вы наверно не так понялми я сказал не стандартный метод а собственный , т.е. представим что у вас есть два типа Save один вызывает процедуру и второй SaveEx вызывает другую как быть ? как это всё описывать ?

Где хотите. В коде, в XML-файле, в INI-файле...
чудесно а если приложение работает на клиенте вы емуу даёте доступ к маппингу и если что то поменялос искать это в тысячахстроках кода и постоянно переключаться между кодом и XML файлом ?


Как угодно.
а примерчик преведёте ?


Что-то очень много вопросов, вам не кажется? Вы, помнится, просили покритиковать и оценить. Но уж если "отличаеться", то опять перегружайте метод и всё.
не боитесь перегрузить код перегрузками ???
...
Рейтинг: 0 / 0
Доступ к данным
    #35233095
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть, на сервер у вас отправляется не параметризованный запрос, а сконктатенированная строка, правильно я понимаю?

в случае с SQL то пока да но я это исправляю уже писал , процедуры идут как положено :)
...
Рейтинг: 0 / 0
Доступ к данным
    #35233104
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то очень много вопросов, вам не кажется? вопросы потому что вы говорите что это плохо но чтобы что то сделать хорошо нужно знать что делать как делать и как это обстоит в других проэктах :) , а такие вопросы и толкают на создание своего потому что не находяться красивые решения у других
...
Рейтинг: 0 / 0
Доступ к данным
    #35233110
dim-on-smirn-off
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одна строчка моего кода против ваших десяти:

new SqlQuery<User>().Insert(db, u);

да только ведь вы пишете ещё далеко не весь код , тот же маппинг в XML сюда прилепите и будет вам ещё коду :)
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Доступ к данным
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]