powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Связь один к одному EF Code First
25 сообщений из 357, страница 11 из 15
Связь один к одному EF Code First
    #38799951
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAсостав структуру возвращаемых данных (проекцию).поправил
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38799974
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

ну не в словах дело
просто есть принятые слова - обобщение, специализация, морфизмы и эти слова относятся не только к поведению, но структуре
в ВИПРОС что то наподобие структурного ООП
методы олучения специализации могут быть разными, могу наложиться структурные фильтры, фильтры на значения, фильтры на методы и события, на визуализацию и т.д., + добавление структурные, поведенческие (это как в прототипировании)
назови как хошь
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38799976
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто не надо для всего этого писать код (кроме собственного поведения) - вот в чем отличие ВИПРОС от других
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38799985
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, ну классно. А что в ВИПРОСе выбрано в качестве ключа шардинга? Какая функция, правило определяет соответсвие сервера ключу?
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38799997
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЯ просто хотел уточнить тот момент, что какие тут могут быть проекции? Ты просто преподносишь их как некий универсальный механизм.

Именно, я преподношу их как универсальный механизм -- для чего? Отвечаю -- для выбора нужного среза данных. Что такое проекция? Это POCO объект с нужным набором полей, может включать в себя поля из одной или нескольких ORM Entity, целые объекты, вычисляемые поля и аггрегации. Механизм универсален потому, что IQueryable запрос на проекцию прозрачно транслируется в IQueryable для ORM, значит с ними можно работать как с полноценными Entity. Проекции хороши тем, что полностью убирают любые вопросы с eager/lazy loading, так как берут одним запросом 100% по факту всё, что указано в проекции. И не надо ничего нигде описывать. Проекции хороши тем, что проекций может быть сколько угодно много, а метод для получения данных -- всего один для каждого корня. Проекции не зависят от реализации репозитория -- за бортом может быть что угодно: EF, NHibernate, или что-то ещё, если они реализуют честный IQueryable провайдер. Проекции замечательно работают с OData, и в принципе с чем угодно. Это не фанатение и не любовь, а банальная практичность.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800003
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAЯ просто хотел уточнить тот момент, что какие тут могут быть проекции? Ты просто преподносишь их как некий универсальный механизм.

Именно, я преподношу их как универсальный механизм -- для чего? Отвечаю -- для выбора нужного среза данных. Что такое проекция? Это POCO объект с нужным набором полей, может включать в себя поля из одной или нескольких ORM Entity, целые объекты, вычисляемые поля и аггрегации. Механизм универсален потому, что IQueryable запрос на проекцию прозрачно транслируется в IQueryable для ORM, значит с ними можно работать как с полноценными Entity. Проекции хороши тем, что полностью убирают любые вопросы с eager/lazy loading, так как берут одним запросом 100% по факту всё, что указано в проекции. И не надо ничего нигде описывать. Проекции хороши тем, что проекций может быть сколько угодно много, а метод для получения данных -- всего один для каждого корня. Проекции не зависят от реализации репозитория -- за бортом может быть что угодно: EF, NHibernate, или что-то ещё, если они реализуют честный IQueryable провайдер. Проекции замечательно работают с OData, и в принципе с чем угодно. Это не фанатение и не любовь, а банальная практичность.Это всё понятно. На практике у тебя как это выглядит? Метод сервиса (контроллера) возвращает IQueryable? Или как?

Я так понял, ты пишешь пяток конкретных методов, которые принимают ограниченный набор параметров, ты их пихаешь в Where, в Select-е обозначаешь проекцию, соответсвующую логике того, что это за метод и вуаля.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800007
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, и тебе ведь не сложно будет показать код решения задачи ТС с проекциями?
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800016
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЭто всё понятно. На практике у тебя как это выглядит? Метод сервиса (контроллера) возвращает IQueryable? Или как?

Я так понял, ты пишешь пяток конкретных методов, которые принимают ограниченный набор параметров, ты их пихаешь в Where, в Select-е обозначаешь проекцию, соответсвующую логике того, что это за метод и вуаля.

Очень грубый пример, метод интерфейса:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
/// детализация сделки
var dealDetails = Service.GetAll().Project().To<DealDetailsDto>();

/// список сделок для обзора
var dealObserves = Service.GetAll().Project().To<DealObserveDto>();

/// и т.д.
...



Конечно в реале это является частью механизма Object Query, туда же все параметры летят, и через интеленс получаем список доступных проекций.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800017
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAViPRos, ну классно. А что в ВИПРОСе выбрано в качестве ключа шардинга? Какая функция, правило определяет соответсвие сервера ключу?
нет у меня пока масштабируемости такой на уровне приложения
я воще то думал, что всякие датацентры сами умеют это без приложения
ну если не умеют, то придтся написать сервис сопоставления (а ключ у меня ГУИД)
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800019
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как нить надо над этим поработать
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800023
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt, и тебе ведь не сложно будет показать код решения задачи ТС с проекциями?

В самом простейшем случае:

Код: c#
1.
var query = db.Carts.Select(p => { Cart = p, Person = p.Person });



Нетипизированная проекция. Это суть. Что-то большее давать без определнённой задачи -- глупо. А «хочу чтобы в Cart сразу был Person», извини меня -- не является задачей. Хоть убей. Непонятно чего в итоге хочет ТС и зачем, а я экстрасенсом не собираюсь работать. Всякие советы типа «используй Include», кроме того, что они плохи, они не призваны помочь ТС, а даны чисто на от....ись.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800024
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

ну это все надо кодировать
а в ВИПРОС - склонировал макротип, поменял пару полей, наложил какой нить фильтр и все
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800028
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAЭто всё понятно. На практике у тебя как это выглядит? Метод сервиса (контроллера) возвращает IQueryable? Или как?

Я так понял, ты пишешь пяток конкретных методов, которые принимают ограниченный набор параметров, ты их пихаешь в Where, в Select-е обозначаешь проекцию, соответсвующую логике того, что это за метод и вуаля.

Очень грубый пример, метод интерфейса :

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
/// детализация сделки
var dealDetails = Service.GetAll().Project().To<DealDetailsDto>();

/// список сделок для обзора
var dealObserves = Service.GetAll().Project().To<DealObserveDto>();

/// и т.д.
...

Не понял, что такое такое интерфейс в данном случае. Service - это класс бизнес-логики, или это gateway к сервису?
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800032
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVostt,

ну это все надо кодировать
а в ВИПРОС - склонировал макротип, поменял пару полей, наложил какой нить фильтр и все

В любом случае надо кодировать. Чуть больше затрат на написание проекций, окупается затем тысячу раз сторицей. Макротипы со строковыми ключами? Увольте. Строгая типизированность и интеллисенс -- не собираюсь от этого отказываться

Тем более проекции, являясь по сути обычными классами, также могут наследоваться, и вообще они очень хорошо кастомизируются.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800034
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНе понял, что такое такое интерфейс в данном случае. Service - это класс бизнес-логики, или это gateway к сервису?

А чего ещё? Класс бизнес-логики в данном случае. Как видишь, никакой зависимости от EF. Сервис в свою очередь работает с репой, и тоже без всякой зависимости от EF.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800036
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

И ещё, ORM Entity также могут выступать в роли проекции, в отдельных случаях можно делать так:

Код: c#
1.
var items = ItemService.GetAll().Project().To<Item>(); // Item ==> Item



Получим Item со всеми потрохами (этакий bulk Include получается по сути)
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800037
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAhVostt, и тебе ведь не сложно будет показать код решения задачи ТС с проекциями?

В самом простейшем случае:

Код: c#
1.
var query = db.Carts.Select(p => { Cart = p, Person = p.Person });

И EF интерпертирует это выражение в JOIN двух таблиц?

Нетипизированная проекция. Это суть. Что-то большее давать без определнённой задачи -- глупо. А «хочу чтобы в Cart сразу был Person», извини меня -- не является задачей.Хм, ну а если нам надо получить Card для выполнения каких-либо действий над ней, для бизнес-логики? Не с анонимным же типом работать и не с типизированным DTO.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800038
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

я мог бы сгенерировать полный набор "классов"
но не увидел выгоду
сейчас какой нить прикладной выхлоп ВИПРОС расширяется и клиентом и поставщиком
ВИПРОС на автомате сливает изменения клиента и поставщика, при этом не надо ниче компилировать, переслать, установить и т.д.
а с кодом были бы проблемы
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800042
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНе понял, что такое такое интерфейс в данном случае.

Service.GetAll()
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800043
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Код: c#
1.
var query = db.Carts.Select(p => { Cart = p, Person = p.Person });

И EF интерпертирует это выражение в JOIN двух таблиц?
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800045
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRoshVostt,

я мог бы сгенерировать полный набор "классов"
но не увидел выгоду
сейчас какой нить прикладной выхлоп ВИПРОС расширяется и клиентом и поставщиком
ВИПРОС на автомате сливает изменения клиента и поставщика, при этом не надо ниче компилировать, переслать, установить и т.д.
а с кодом были бы проблемы

Возможно. Но я ж всей ситуации не знаю.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800046
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt
Код: c#
1.
var query = db.Carts.Select(p => { Cart = p, Person = p.Person });


И EF интерпертирует это выражение в JOIN двух таблиц?

Да.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800048
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAНе понял, что такое такое интерфейс в данном случае.

Service.GetAll()Service - это репозиторий?
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800049
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAХм, ну а если нам надо получить Card для выполнения каких-либо действий над ней, для бизнес-логики? Не с анонимным же типом работать и не с типизированным DTO.

Есть два пути: проекции могут мапиться также и обратно в Entity. Или для изменяющих запросов, берутся Entity. Я предпочитаю для изменения работать исключительно с Entity, а проекции только для получения данных, для отображения или передачи наружу.
...
Рейтинг: 0 / 0
Связь один к одному EF Code First
    #38800052
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAService - это репозиторий?

Нет, я же сказал, это сервисный класс бизнес-логики. Т.е. GetAll() это всё, что доступно текущему пользователю, а не всё вообще. В логика маппинга для проекции также в зоне ответственности бизнес-логики. Просто я упрощаю примеры.
...
Рейтинг: 0 / 0
25 сообщений из 357, страница 11 из 15
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Связь один к одному EF Code First
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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