Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Доступ к данным в большом проекте / 3 сообщений из 3, страница 1 из 1
01.02.2011, 13:22
    #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
01.02.2011, 13:27
    #37090556
donkey80
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным в большом проекте
Нечаянно нажал "опубликовать" :(
Код немного упрощен, но показывает суть...
Какие плюсы и минусы в такой организации доступа к данным? По сравнению с ORM, DataSet'ами и другими решениям... Просто сейчас все больше сталкиваюсь с реализациями на основе ORM, но пока что у меня нет уверенности, что этот подход намного лучше моего.
...
Рейтинг: 0 / 0
01.02.2011, 17:56
    #37091525
FSou1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к данным в большом проекте
donkey80,

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


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