|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Прошу помощи. Начал разбираться с репозитариями... На сайте вроде всё красиво описывают, но в реале у меня не работает. Подскажите ,что делаю не так. Имеется база данных на SQLExpress. 1. В проект добавил edmx сформировав его на основе базы данных. 2. Описал абстрактный интерфейс Код: c# 1. 2. 3. 4. 5. 6. 7.
3. Написал реализацию репозитария: Код: 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.
в коде контроллера Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
В результате выдаёт ошибку: авторНевозможно завершить операцию, поскольку класс DbContext был удален. хотя если в репозитарии пишу что-нибудь так Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Отлавливает ошибку и возвращает набор данных "ФиктивныеГруппы", а далее без проблем. Подскажите, что я не понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 12:49 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
1. Не надо возвращать IQueryable<T> в репозиториях, только IEnumerable<T> или IList<T>. 2. Если нужны динамические фильтры, их смело можно описать через Func<> параметр. Параметр перед вызовом честно инициализируется через анонимный делегат. 3. Читай твой "полурусский" код просто невозможно. Пиши нормально и люди тебя начнут понимать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 12:55 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУ1. Не надо возвращать IQueryable<T> в репозиториях, только IEnumerable<T> или IList<T>. 2. Если нужны динамические фильтры, их смело можно описать через Func<> параметр. Параметр перед вызовом честно инициализируется через анонимный делегат. 3. Читай твой "полурусский" код просто невозможно. Пиши нормально и люди тебя начнут понимать. слушай, существует мнение, что IQueryable<T> -- уже готовый интерфейс репы, т.е. его можно невозбранно возвращать. да и как быть с тем же OData? есть весовые причины готовить только IEnumerable/IList? ну кроме той, чтобы оставить возможность подсовывать в качестве источника данных, провайдер которого даже не собирается поддерживать LINQ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 13:01 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
hVostt, смотри тут: Проблемы при использовании шаблона Repository . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 13:25 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
hVosttслушай, существует мнение, что IQueryable<T> -- уже готовый интерфейс репы, т.е. его можно невозбранно возвращать. да и как быть с тем же OData? OData - это другая специфика и принцип работы. Не нужно мешать OData с классическим репозиторием. hVosttесть весовые причины готовить только IEnumerable/IList Скиана опередил. У меня тоже этот рецептик пылится. Учи, вникай. http://codearticles.ru/articles/2357 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 13:29 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
skyANAhVostt, смотри тут: Проблемы при использовании шаблона Repository . Эту статью уже как-то рассматривали. Проблем в передаче из репозитория IQueryable<T> не увидел. Спецификации по-любому нужны. Технические поля сущностей ORM скрываются моделью DTO (можно вообще работать с интерфейсами, если уж ORM на столько уродский). UnitOfWork вообще отдельная песня, какого ляда он делает в объекте репозитория? Нафиг его оттуда и проблема решена. В общем проблем не вижу. Пока что. Или я что-то проглядел? Что может пойти не так при использовании IQueryable<T>? Чистый интерфейс без возможности как-то модифицировать репу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 13:38 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУ, пока что в рецептике усмотрел единственную проблему: Ссылка на Repository из доменного объекта но отказываться от лейзи пропертей в пользу рисования отдельного DTO над DTO я бы не стал, это не решение проблемы, это геморрой на задницу. спецификации никто не отменял, Include никто не отменял, все это прекрасно ложиться на паттер "Корень агрегации". ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 13:55 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУOData - это другая специфика и принцип работы. Не нужно мешать OData с классическим репозиторием. как это? у проекта уже есть слой доступа к данным, бизнес-логика. предлагаешь для OData отдельно прокинуть какой-то другой механизм? и в чём профит? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 13:56 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
hVosttskyANAhVostt, смотри тут: Проблемы при использовании шаблона Repository . Эту статью уже как-то рассматривали. Проблем в передаче из репозитория IQueryable<T> не увидел. Если не увидел - это твои и только твои проблемы. Пиши код хоть раком, нам-то что с того. Ты попросил озвучить причины, тебе озвучили. hVosttМСУ, пока что в рецептике усмотрел единственную проблему: Ссылка на Repository из доменного объекта Речь о IQueryable, сосредоточься. В DTO не нужны никакие ленивые свойства, DTO это объект для трансфера и только. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 14:24 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
hVosttМСУOData - это другая специфика и принцип работы. Не нужно мешать OData с классическим репозиторием. как это? у проекта уже есть слой доступа к данным, бизнес-логика. предлагаешь для OData отдельно прокинуть какой-то другой механизм? и в чём профит? В OData IQueryable оперирует контроллер и только он. Контроллер - это не репозиторий. У тебя как всегда смешалось в кучу всё, кони, люди, сено. Еще раз, речь не о OData, в котором есть своя специфика - работа с IQueryable. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 14:27 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУDTO это объект для трансфера и только.DTO - это часто архитектурный костыль, возникающий из-за смешивания логики и данных в одном классе! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 14:53 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
hVosttskyANAhVostt, смотри тут: Проблемы при использовании шаблона Repository . Эту статью уже как-то рассматривали. Проблем в передаче из репозитория IQueryable<T> не увидел.Как поарботаешь в команде из 10+ человек, так поймёшь. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 14:56 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУНе надо возвращать IQueryable<T> в репозиториях, только IEnumerable<T> или IList<T>.Отказ от IQueryable может привести к необходимости реализации через "N+1 запрос", там где этого можно избежать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 14:59 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КМСУDTO это объект для трансфера и только.DTO - это часто архитектурный костыль, возникающий из-за смешивания логики и данных в одном классе! Не понял, а логика тут каким боком? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 14:59 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КМСУНе надо возвращать IQueryable<T> в репозиториях, только IEnumerable<T> или IList<T>.Отказ от IQueryable может привести к необходимости реализации через "N+1 запрос", там где этого можно избежать. Шаблон Specification, изучаем. Скиана ссылку дал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:00 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... DTO - это часто архитектурный костыль, возникающий из-за смешивания логики и данных в одном классе! Не понял, а логика тут каким боком? ) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Если работать с WCF, в этом примере тут проблемы точно будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:04 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КМСУпропущено... Не понял, а логика тут каким боком? ) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Если работать с WCF, в этом примере тут проблемы точно будут. Это не DTO. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:05 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Кто нибудь может пояснить в моём коде, что не так и как это можно исправить. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:08 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Отказ от IQueryable может привести к необходимости реализации через "N+1 запрос", там где этого можно избежать. Шаблон Specification, изучаем. Скиана ссылку дал.Его возможности ограничены. Есть способы лучше. Правда EF "из коробки" такого не умеет, но оно реализуется сравнительно не сложно. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:11 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей Кпропущено... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Если работать с WCF, в этом примере тут проблемы точно будут. Это не DTO.Да. Это повод создать DTO на пустом месте, о чём я и хотел сказать. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:12 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КЕго возможности ограничены. Чем? Алексей КЕсть способы лучше. Правда EF "из коробки" такого не умеет, но оно реализуется сравнительно не сложно. Речь не о поддержке трансляции выражения, а о типе возвращаемом значении, в данном случае IQueryable. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:13 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КЭто повод создать DTO на пустом месте, о чём я и хотел сказать. :-) Нет никакого пустого места :) DTO нужен только для трансфера. Нужен трансфер (SOA, голуби, РЖД России, etc) - берем DTO, намапливаемся, передаем. Не понимаю проблемы... Причем тут логика-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:15 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей КЕго возможности ограничены. Чем?Функционалом. :-) МСУАлексей КЕсть способы лучше. Правда EF "из коробки" такого не умеет, но оно реализуется сравнительно не сложно. Речь не о поддержке трансляции выражения, а о типе возвращаемом значении, в данном случае IQueryable.IQueryable + подставляемые выражения (назовём это так) позволяют творить чудеса. Зачем же себя ограничивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:16 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
МСУАлексей КЭто повод создать DTO на пустом месте, о чём я и хотел сказать. :-) Нет никакого пустого места :) DTO нужен только для трансфера. Нужен трансфер (SOA, голуби, РЖД России, etc) - берем DTO, намапливаемся, передаем. Не понимаю проблемы... Причем тут логика-то?Проблема в самой необходимости слоя DTO, когда без него можно обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:19 |
|
IRepository как пользоваться
|
|||
---|---|---|---|
#18+
Алексей КФункционалом. :-) Каким? Так... Попахивает топиком ненависти к ASP.NET MVC Алексей КIQueryable + подставляемые выражения (назовём это так) позволяют творить чудеса. Зачем же себя ограничивать? Так ты с этим IQueryable + "подставляемые выражения" можешь точно так же работать в шаблоне спецификации. В чем проблема? Накохер (с) мне таскаться с этим IQueryable по всему полю? Сеять потенциальные ошибки, плодить потенциальные грабли и пугать местное население? В топку :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2013, 15:19 |
|
|
start [/forum/topic.php?fid=17&fpage=23&tid=1349917]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 166ms |
0 / 0 |