powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Lazy Loading & Repository как подружить?
24 сообщений из 24, страница 1 из 1
Lazy Loading & Repository как подружить?
    #38210468
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!
классический код:
Код: c#
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.
    public class Customer
    {
        public int CustomerID { get; set; }
        public string Name { get; set; }
        public ICollection<Account> Accounts { get; set; }
    }

    public class Account
    {
        public int AccountID { get; set; }
    }

    public interface ICustomerRepository
    {
        IEnumerable<Customer> GetCustomers();
        Customer GetCustomerByID(int customerID);
        void InsertCustomer(Customer customer);
        void UpdateCustomer(Customer customer);
        void DeleteCustomer(int customerID);
    }

    public class CustomerRepository : ICustomerRepository
    {
        public IEnumerable<Customer> GetCustomers()
        {
            List<Customer> customers = new List<Customer>();
            customers.Add(new Customer { CustomerID = 1, Name = "Customer1" });
            customers.Add(new Customer { CustomerID = 2, Name = "Customer2" });
            customers.Add(new Customer { CustomerID = 3, Name = "Customer3" });
            customers.Add(new Customer { CustomerID = 4, Name = "Customer4" });
            customers.Add(new Customer { CustomerID = 5, Name = "Customer5" });

            return customers;
        }

        public Customer GetCustomerByID(int customerID)
        {
            throw new NotImplementedException();
        }

        public void InsertCustomer(Customer customer)
        {
            throw new NotImplementedException();
        }

        public void UpdateCustomer(Customer customer)
        {
            throw new NotImplementedException();
        }

        public void DeleteCustomer(int customerID)
        {
            throw new NotImplementedException();
        }
    }


Хочется, чтобы Accounts подгружался "лениво", как это сделать БЕЗ использования вездесущего Entity Framework?
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38210475
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Вам шашечки или ехать?" (с)
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38210477
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

ехать с шашечками)
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211304
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_N,

выкинуть репозиторий, и не страдать архитектурной ерундой.
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211493
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtor,

ок, а где и как организовывать взаимодействие с БД (я использую шаблон MVVM)?
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211539
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Nicky_N]Хочется, чтобы Accounts подгружался "лениво", как это сделать БЕЗ использования вездесущего Entity Framework?/quot]
Например:
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class Customer
{
    public int CustomerID { get; set; }
    public string Name { get; set; }

    public Lazy<ICollection<Account>> Accounts { get; set; }
}
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211546
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или подумать над тем, как это реализовано в Entity Framework и сделать по аналогии.
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211617
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorNicky_N, выкинуть репозиторий, и не страдать архитектурной ерундой.
Репозиторий, датасервис или иная обертка по-любому нужна. Другое дело, что эта обертка может быть отнаследована от ef контекста или отдавать через паблик свойство доступ к контексту для телодвижений извне.

P.S. По вопросу: сделать в конструкторе параметр EfContext.Configuration.LazyLoadingEnabled?
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211625
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

я в сабже просил без EntityFramework)
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211632
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NМСУ, я в сабже просил без EntityFramework)
А куда сейчас без Entity Framework? :)
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211638
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA предложил интересную конструкцию: Lazy<T>, погуглил, вот что вышло:

Код: c#
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.
    public class Customer
    {
        public int CustomerID { get; set; }
        public string Name { get; set; }
        public Lazy<List<Account>> Accounts { get; set; }
    }

    public class CustomerRepository : ICustomerRepository
    {
        public IEnumerable<Customer> GetCustomers()
        {
            List<Customer> customers = new List<Customer>();
            customers.Add(new Customer
            {
                CustomerID = 1,
                Name = "Customer1",
                Accounts = new Lazy<List<Account>>(() => { return GetAccountByCustomerID(1); })
            });
            customers.Add(new Customer
            {
                CustomerID = 2,
                Name = "Customer2",
                Accounts = new Lazy<List<Account>>(() => { return GetAccountByCustomerID(2); })
            });
            customers.Add(new Customer
            {
                CustomerID = 3,
                Name = "Customer3",
                Accounts = new Lazy<List<Account>>(() => { return GetAccountByCustomerID(3); })
            });
            customers.Add(new Customer
            {
                CustomerID = 4,
                Name = "Customer4",
                Accounts = new Lazy<List<Account>>(() => { return GetAccountByCustomerID(4); })
            });
            customers.Add(new Customer
            {
                CustomerID = 5,
                Name = "Customer5",
                Accounts = new Lazy<List<Account>>(() => { return GetAccountByCustomerID(5); })
            });

            return customers;
        }

        private List<Account> GetAccountByCustomerID(int customerID)
        {
            List<Account> list = new List<Account>();
            list.Add(new Account { AccountID = 100, CustomerID = customerID });
            list.Add(new Account { AccountID = 200, CustomerID = customerID });

            return list;
        }
    }


Не хочу показаться догматиком, но меня волнует место метода GetAccountByCustomerID. Это как бы метод репозитария Account?
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211645
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУА куда сейчас без Entity Framework? :)
а вот куда: Oracle 9i R2, первый нативный ODAC без поддержки EF, + отказ на начальном этапе от использования NHibernate. так что только ADO.Net, только хардкор))
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211673
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NOracle 9i R2
На помойку старьё: http://download.oracle.com/oll/obe/EntityFrameworkOBE/EntityFrameworkOBE.htm

Nicky_Nотказ на начальном этапе от использования NHibernate.
Зачем отказались от этого замечательного ORM?

Nicky_Nтак что только ADO.Net, только хардкор))
ССЗБ :)
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211682
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНа помойку старьё: http://download.oracle.com/oll/obe/EntityFrameworkOBE/EntityFrameworkOBE.htm


Prerequisites
Before starting this tutorial, you should:

2. Install Oracle Database 10.2 or later or Oracle Database XE.

я б с радостью перешел на более новую версию, но от меня в этом вопросе, к сожалению, ничего не зависит.
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211686
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NНе хочу показаться догматиком, но меня волнует место метода GetAccountByCustomerID. Это как бы метод репозитария Account?Нет такой догмы, делать отдельный репозитарий на каждую сущность. Делайте как считаете нужным.

Сcылка для почитать: Проблемный шаблон Repository .
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211698
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_Nя б с радостью перешел на более новую версию, но от меня в этом вопросе, к сожалению, ничего не зависит.
Да верю, верю. Просто нахрена было отказываться от хибернейта, не понимаю.
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211805
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

я не совсем правильно выразился. когда проект стартовал - хибернейт даже не рассматривали (вот так вот ужас!), а потом через 4 года столько уже было понаписано, что уже и не стали)
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211815
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предположу:

GetCustomers - выдача списка Customer с Accounts = null - это для формирования формы журнала
GetCustomerByID - выдача Customer по ID с Accounts != null - это для формирования формы карточки

тогда просто в первом методе не заполнять Accounts, а во втором, соответственно, заполнять.
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211819
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NМСУ,

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

Ну так самое время рассмотреть его внедрение. Старые лохмотья пусть тухнут, новые допилы - через прямые руки. Не?
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211822
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_NSolYUtor,

ок, а где и как организовывать взаимодействие с БД (я использую шаблон MVVM)?
Преимущественно использовать шаблон DbContext Per Form. Контекст передавать прямо в VM, при закрытии формы SaveChanges или CancelChanges, смотря что там юзер накликал.
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211829
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmaw,

вроде как бы уже решил проблему с помощью Lazy<T>.
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211831
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorNicky_NSolYUtor,

ок, а где и как организовывать взаимодействие с БД (я использую шаблон MVVM)?
Преимущественно использовать шаблон DbContext Per Form. Контекст передавать прямо в VM, при закрытии формы SaveChanges или CancelChanges, смотря что там юзер накликал.
Бред. Особенно неадекватен при работе с вебом.
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211834
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУNicky_NМСУ,

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

Ну так самое время рассмотреть его внедрение. Старые лохмотья пусть тухнут, новые допилы - через прямые руки. Не?

я не смогу всем переломать хребет) и так вот пытаюсь: тут тебе MVVM, тут тебе Repository pattern - глядишь, когда случится чудо с переводом на новую версию БД или использованием хибернейта - останется только DAL переписать!
...
Рейтинг: 0 / 0
Lazy Loading & Repository как подружить?
    #38211838
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nicky_N, ок, отлипаю :)
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Lazy Loading & Repository как подружить?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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