powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Доступ к данным в большом проекте
3 сообщений из 3, страница 1 из 1
Доступ к данным в большом проекте
    #37090530
donkey80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, в одном из проектов я сделал такую схему:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
public abstract class CRUDDA<T>
{
...
        internal abstract Mapper<T> CRUDMapper { get; }
        protected abstract string AddSPName { get; }
        public virtual void Add(T entityToAdd)
        {
            using (IDbConnection Conn = DBObjectsFactory.CreateConnection())
            {
                IDbCommand InsertCommand = DBObjectsFactory.CreateSPCommand(Conn, AddSPName);
                CRUDMapper.BuildAddCommand(InsertCommand, entityToAdd);
                Conn.Open();
                InsertCommand.ExecuteNonQuery();
            }
        }

}
public class MyClassCRUDDA  :CRUDDA<MyClass> 
{  
...
      internal override Mapper<MyClass> CRUDMapper
        {
            get { return new UserMapper(); }
        }

        protected override string AddSPName { get { return "dbo.MyClass_Add"; } }

        protected override string UpdateSPName { get { return "dbo.MyClass_Update"; } }

        protected override string DeleteSPName { get { return "dbo.MyClass_Delete"; } }

        protected override string GetSPName { get { return "dbo.MyClass_Get"; } }
}

internal class MyClassMapper : Mapper<MyClass>
{
...
        protected internal override void FillFromReader(IDataReader reader, MyClass entity)
        {
            entity.Id = reader["Id"].ToString();
            entity.Field1= reader["SomeField1"].ToString();
            entity.Field2= reader["SomeField2"].ToString();
        }

        protected internal override void BuildAddCommand(IDbCommand cmd, MyClass entityToAdd)
        {
            cmd.Parameters.Add(DBObjectsFactory.CreateParameter("@id", entityToAdd.Id));
            cmd.Parameters.Add(DBObjectsFactory.CreateParameter("@someField1", entityToAdd.Field1));
            cmd.Parameters.Add(DBObjectsFactory.CreateParameter("@someField2", entityToAdd.Field2));
        }

        protected internal override void BuildUpdateCommand(IDbCommand cmd, MyClass entityToUpdate)
        {
            cmd.Parameters.Add(DBObjectsFactory.CreateParameter("@id", entityToUpdate.Id));
            cmd.Parameters.Add(DBObjectsFactory.CreateParameter("@someField1", entityToUpdate.Field1));
            cmd.Parameters.Add(DBObjectsFactory.CreateParameter("@someField2", entityToUpdate.Field2));
        }
}
...
Рейтинг: 0 / 0
Доступ к данным в большом проекте
    #37090556
donkey80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нечаянно нажал "опубликовать" :(
Код немного упрощен, но показывает суть...
Какие плюсы и минусы в такой организации доступа к данным? По сравнению с ORM, DataSet'ами и другими решениям... Просто сейчас все больше сталкиваюсь с реализациями на основе ORM, но пока что у меня нет уверенности, что этот подход намного лучше моего.
...
Рейтинг: 0 / 0
Доступ к данным в большом проекте
    #37091525
FSou1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
donkey80,

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


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