|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320Где-то в степиuser7320, все равно, репозитарий не буду делать (с) Вы ещё скажите, что каждое ОРМ у вас в своём репозитории, а не все в одном.Когда реализован репозиторий, то изначально мы получает от него объекты доменной модели, и не нужно танцевать с бубном вокругuser7320Переделка старого ОРМа под POCO повлекла ошибки залогинивания, причём как при обращении к старой БД, так и к новой, что на одном сервере, что на другом (на моей машине копия по структуре продакшеновой БД стоит). Насколько я нарыл в Инете, это скорее связано с какими-то настройками то ли СУБД, то ли ОС с её правами доступа.и смешивать в одном проекте! EF разных версий. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2013, 12:16 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320user7320пропущено... Вы ещё скажите, что каждое ОРМ у вас в своём репозитории, а не все в одном. А каждый репозиторий - отдельный солюшен. Проблема-то всё равно должна остаться та же, что я описал.Проблемы кривой архитектуры решаются рефакторингом. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2013, 12:21 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
skyANAuser7320пропущено... Вы ещё скажите, что каждое ОРМ у вас в своём репозитории, а не все в одном.Когда реализован репозиторий, то изначально мы получает от него объекты доменной модели, и не нужно танцевать с бубном вокругuser7320Переделка старого ОРМа под POCO повлекла ошибки залогинивания, причём как при обращении к старой БД, так и к новой, что на одном сервере, что на другом (на моей машине копия по структуре продакшеновой БД стоит). Насколько я нарыл в Инете, это скорее связано с какими-то настройками то ли СУБД, то ли ОС с её правами доступа.и смешивать в одном проекте! EF разных версий. Даже если вы будете делать репозиторий, вы же не откажетесь от EF? Так репозиторий у вас каждый в своей сборке по числу БД, или всё в одном проекте, да ещё и в том, что и основная программа? У меня проблема, что конфликтуют ORM от разных версий EF в одной и той же сборке. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 05:09 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320skyANAпропущено... Когда реализован репозиторий, то изначально мы получает от него объекты доменной модели, и не нужно танцевать с бубном вокругпропущено... и смешивать в одном проекте! EF разных версий. Даже если вы будете делать репозиторий, вы же не откажетесь от EF? Так репозиторий у вас каждый в своей сборке по числу БД, или всё в одном проекте, да ещё и в том, что и основная программа?Да репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД).user7320У меня проблема, что конфликтуют ORM от разных версий EF в одной и той же сборке.Используй везде отдну версию EF, проведи рефакторинг. Так можно 100500 сторонних библиотек заюзать: в этом проекте используем такую версию, в этом другую, - что за зоопарк, блеать? Или тебе предложить костыль? Загружай их в разные домены приложения. Но боюсь ты и вразных доменах на какую-нибудь херню напорешься. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2013, 11:28 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
skyANAuser7320пропущено... Даже если вы будете делать репозиторий, вы же не откажетесь от EF? Так репозиторий у вас каждый в своей сборке по числу БД, или всё в одном проекте, да ещё и в том, что и основная программа?Да репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД).user7320У меня проблема, что конфликтуют ORM от разных версий EF в одной и той же сборке.Используй везде отдну версию EF, проведи рефакторинг. Так можно 100500 сторонних библиотек заюзать: в этом проекте используем такую версию, в этом другую, - что за зоопарк, блеать? Или тебе предложить костыль? Загружай их в разные домены приложения. Но боюсь ты и вразных доменах на какую-нибудь херню напорешься. А какой принцип, по которому вы разделяете на разные сборки куски приложения? У вас над каждым куском свой человек работает, поэтому вы потом все DLL линкуете, или как? Вот, положим, есть шаблон MVVM в WPF. Вот эти вот M, VM и V тоже надо разделять? Скажем, модель в одну сборку, а модель представления и представление (т. к. они завязаны на одну технологию) - вдругую? Потом, скажем, слой общения с веб-службами, слой авторизации и аутентификации - тоже каждый в свою DLL? Плюс сборки - по одной на каждый репозиторий (т. е. на каждый поставщик данных)? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2013, 07:27 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320, я же написал, что репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД). Что тут не понятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2013, 09:44 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
skyANAuser7320, я же написал, что репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД). Что тут не понятно? Непонятно, как делить программу на сборки окромя репозиториев. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2013, 09:58 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320skyANAuser7320, я же написал, что репозиторий каждый в своей сборке по числу поставщиков данных (это не обязательно БД). Что тут не понятно? Непонятно, как делить программу на сборки окромя репозиториев.Дак может её и не надо делить на сборки? Приложения WPF с шаблоном проектирования модель-представление-модель представления В начале статьи есть ссылка на исходники проекта. Посмотри как они организованы: разложены по папкам. Начни с этого: разложи классы по файлам и папкам, а когда вдруг поймёшь, что отдельную папку стоит вынести в отдельный проект, то и вынесешь. P.S.: в процессе изучения MVVM ты не наткнулся ни на один пример проекта? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2013, 12:05 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
skyANAuser7320пропущено... Непонятно, как делить программу на сборки окромя репозиториев.Дак может её и не надо делить на сборки? Приложения WPF с шаблоном проектирования модель-представление-модель представления В начале статьи есть ссылка на исходники проекта. Посмотри как они организованы: разложены по папкам. Начни с этого: разложи классы по файлам и папкам, а когда вдруг поймёшь, что отдельную папку стоит вынести в отдельный проект, то и вынесешь. P.S.: в процессе изучения MVVM ты не наткнулся ни на один пример проекта? Меня уже тошнит от той статьи. Я давно всё там перелопатил, включая пример проекта. Давно всё пихаю по папках (пространствам имён) и прочее. Я пробовал делать свой проект, где каждая часть (репозиторий, модели, модели представления с представлениями) разложены по своим солюшенам. Запускал три версии Студии и работал. Получилось хреново. Лучше, если уж на проекты делить, то всё в одном солюшене, ибо задолбало копмилить каждый раз три солюшена из-за того, что в солюшене моделей что-то поменялось (остальные-то части на модели ссылаются). Тут с EF получилось, что его ORM и его репозиторий лучше хранить в отдельном проекте потому, что старые версии EF были толи багованые, толи фичёванные , а не потому, что так "по архитектуре надо". ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2013, 15:20 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320 толи багованые, толи фичёванные Кстати, у меня в обоих случаях "DB first", но ошибка такая же. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2013, 15:22 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320skyANAпропущено... Дак может её и не надо делить на сборки? Приложения WPF с шаблоном проектирования модель-представление-модель представления В начале статьи есть ссылка на исходники проекта. Посмотри как они организованы: разложены по папкам. Начни с этого: разложи классы по файлам и папкам, а когда вдруг поймёшь, что отдельную папку стоит вынести в отдельный проект, то и вынесешь. P.S.: в процессе изучения MVVM ты не наткнулся ни на один пример проекта? Меня уже тошнит от той статьи. Я давно всё там перелопатил, включая пример проекта. Давно всё пихаю по папках (пространствам имён) и прочее. Я пробовал делать свой проект, где каждая часть (репозиторий, модели, модели представления с представлениями) разложены по своим солюшенам. Запускал три версии Студии и работал. Получилось хреново. Лучше, если уж на проекты делить, то всё в одном солюшене, ибо задолбало копмилить каждый раз три солюшена из-за того, что в солюшене моделей что-то поменялось (остальные-то части на модели ссылаются). Тут с EF получилось, что его ORM и его репозиторий лучше хранить в отдельном проекте потому, что старые версии EF были толи багованые, толи фичёванные , а не потому, что так "по архитектуре надо".Короче, Склифосовский! Что тебя конкретно не устраивает? Солюшины - фигушины. Компилить его задолбало. Можно создать солюшн, что будет содержать в себе другие солюшины. Есть GAC, есть NuGet, есть такое понятие, как Artifact Repository. Ты чего хочешь добиться-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2013, 15:38 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
Может, папиффку? Ты у себя и своё, а я у себя и своё? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2013, 15:47 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320skyANAА про обращение к БД в конктрукторе доменного объекта я промолчу. Ну, вы как бы не замечайте этого. Я же сказал, что пока без репозитория. skyANAuser7320, используется ToList(), то есть будет fetch из WeedGroups, и во время него будет выполняться запрос к Biogroups. Может вылететь исключение, что нельзя открыть DataReader, т.к. уже есть один открытый. А что значит "может вылететь"? Я вот запустил пару раз - и всё открылось и выполнилось. При каких условиях может, а при каких не может? Памяти ему не хватит, или количество DataReader'ов ограничего? Я щас запустил этот код - странно, но почему-то он выдал "Only parameterless constructors and initializers are supported in LINQ to Entities". Это чего, и ReadOnlyCollection тоже нельзя применять, если она с параметров в конструкторе? UPD. Вы меня уговорили. Вместо IReadOnlyCollection стал использовать IEnumerable. Но не потому, что так типа нужно, а потому, что в линке нельзя использовать параметризованные конструкторы (словил исключение - у ReadOnlyCollection конструктор всего один и обязательно с параметром). И да, убрал ToList в середине запроса. Но не потому, что там типа ДатаРидеров не хватит, а потому, что линк не понимает таких выражений (тоже словил исключение). В результате получилось вот что. Ну, как теперь? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Есть ли смысл так делать, елси у меня свойство this.Groups типа IEnumerable? Тут ещё штука в том, что по этому свойству модели (ASP.NET MVC) надо в представлении не только пройтись форичем, но и знать число элементов этой коллеции, чтобы растянуть на это число ячейки в табличке. Использовать IEnumerable.Count() - лишний раз проходить по коллеции (я так понимаю, что этот метод именно проходит по ней, чтобы посчитать число всех элементов). Какой в таком случае лучше свойству this.Groups поставить тип? IList будет достаточно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 17:01 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320, авторя так понимаю, что этот метод именно проходит по ней, чтобы посчитать число всех элементов Вы нехправильно понимаете, ну вы что - полный кретин, что документацию почитать не можете.. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 19:29 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, авторя так понимаю, что этот метод именно проходит по ней, чтобы посчитать число всех элементов Вы нехправильно понимаете, ну вы что - полный кретин, что документацию почитать не можете.. А как он узнаёт число элементов? Где об этом написано? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 20:27 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320, поиграйся Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
как бы еще наводящий., в каких случаях выгодно орм выкидывать наружу чистый IEnumerable ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 22:34 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320Где-то в степиuser7320, пропущено... Вы нехправильно понимаете, ну вы что - полный кретин, что документацию почитать не можете.. А как он узнаёт число элементов? Где об этом написано?Мда, и не стыдно такие вопросы задавать? Enumerable.Count<TSource> Method (IEnumerable<TSource>) RemarksIf the type of source implements ICollection<T> , that implementation is used to obtain the count of elements. Otherwise, this method determines the count. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2013, 22:44 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
skyANAМда, и не стыдно такие вопросы задавать? Enumerable.Count<TSource> Method (IEnumerable<TSource>)Remarks If the type of source implements ICollection<T>, that implementation is used to obtain the count of elements. Otherwise, this method determines the count. Я несколько раз ещё раньше прочёл эти строчки там и так и не понял, КАК ИМЕННО Count() получает число элементов. Беглый осмотр трёх результатов на StackOverflow привёл к ответам типа "только через итерацию, прямого свойства нет". Только углубившись, обнаружил пример, подобный вашему . Я так понимаю, это из исходников ("Рефлектором" посмотрели или что-то такое?)? К сожалению, я больше реагировал на зелёные галочки там, забыв, что неграмотных или незнающих хватает и на StackOverflow, несмотря на их тыщи и десятки тыщь репутации. Тогда касательно моего пример, если я в конце запроса вызываю ToList(), то возвращается список, который поддерживает ICollection и метод Count() может считать уже готовое свойство Count. Если же оставить результат как IQueryble, то Count() будет именно перебирать элементы. Правильно? Стоит, однако, заметить, что это довольно неоднозначное поведение. Мне бы больше понравилось, если бы методы всегда перебирали элементы, а свойства - возвращали готовое значение. А так нужно всегда запоминать специальное поведение в специальных случаях, написанное где-то в глубине статьи мелким шрифтом. Спасибо за наводки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 06:23 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
Где-то в степикак бы еще наводящий., в каких случаях выгодно орм выкидывать наружу чистый IEnumerable При жадной загрузке? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 06:33 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320Где-то в степикак бы еще наводящий., в каких случаях выгодно орм выкидывать наружу чистый IEnumerable http://stackoverflow.com/a/2876655/808128 Что-то я запутался... Ну вот. У метода Select есть два исполнения - для Queryable и для Enumerable вариантов. Судя по ссылке, они довольно сильно различаются по фактическому исполнению кода, а вот тут , например, предалагают в четвёртом примере в Remarks использовать лямбда-выражения вместо делегата Func. Подумаешь - делегат или лямбду! А то, что это будет либо в СУБД выполняться, либо у клиента на машине - внимания они не обращают? Т. е. передал в параметр delegate(...){...} - получил исполнение в БД. Написал лямбду (что я всегда делаю, т. к. удобнее) - получил OutOfMemoryException? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 08:52 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320Т. е. передал в параметр delegate(...){...} - получил исполнение в БД. Написал лямбду (что я всегда делаю, т. к. удобнее) - получил OutOfMemoryException? Т. е., наоборот - с лямбдой - на сервере, а с делегатом - на клиенте. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 10:06 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
У меня сразу несколько вопросов возникло. 1. авторIf the type of source implements ICollection<T>, that implementation is used to obtain the count of elements. Otherwise, this method determines the count. А можете ещё пояснить эту фразу? Конкретно, какой вложенности "type of source" имеется ввиду? Например, я получаю результат запроса в виде IQuerayble, перевожу его в List через ToList(), потом отдаю это в свойство, которое показывает IEnumerable. Пользователь свойства считывает его и применяет метод Count(). В этом случае что имеется ввиду под "type of source": IEnumerable, List, IQuerayble или что-то ещё? 2. Я так понимаю, что даже если в свойство попадает полнофункциональный List, то показывая его как IEnumerable, я обрезаю ему функциональность до банального перебора коллекции и только? 3. Теперь учтём сразу 1 и 2. Пользователь моего свойства не знает, что служит источником для этого свойства. И если я показываю ему IEnumerable, то использовать расширение Enumerable.Count() он не имеет права, т. к. может загрузить как не знает, поддерживает ли источник этого свойства ICollection или нет. Так? Вот теперь тут всплывает наш старый спор - почему бы не заменить экспозицию свойства как IReadOnlyCollection на как IEnumerable, как предлагал skyANA. А потому что накладных расходов всё равно нет, если я в конце запроса вызываю ToList(), зато через IReadOnlyCollection я могу пользователю моего свойства явно сказать, что свойство можно не только перебирать, но и получить у него готовое число элементов Count, не боясь лишних переборов коллеции. Т. е. если я сам пишу свойства и сам их использую - то да, можно IEnumerable и потом для него вызывать расширитель Count(). Но в общем случае надо всегда показывать через тип возврата, что можно делать, а что нельзя. Правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 10:39 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
Вот, например http://stackoverflow.com/questions/343466/does-dot-net-have-an-interface-like-ienumerable-with-a-count-property ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 10:40 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
user7320skyANAМда, и не стыдно такие вопросы задавать? Enumerable.Count<TSource> Method (IEnumerable<TSource>)Remarks If the type of source implements ICollection<T>, that implementation is used to obtain the count of elements. Otherwise, this method determines the count. Я несколько раз ещё раньше прочёл эти строчки там и так и не понял, КАК ИМЕННО Count() получает число элементов. Ах, вот оно что, тебе смысл данного замечания не понятен. Плохо. В следующий раз так и пиши: прочитал документацию и всё равно не понимаю как работает IEnumerable.Count, что означают эти строки? Вместо рассуждений типа:user7320Использовать IEnumerable.Count() - лишний раз проходить по коллеции... бла бла блаТы своими рассуждениями выставляешь себя в не лучшем виде. user7320Я так понимаю, это из исходников ("Рефлектором" посмотрели или что-то такое)?Да, это исходники System.Core.dll. Смотрел при помощи JustDecompile. user7320Стоит, однако, заметить, что это довольно неоднозначное поведение. Мне бы больше понравилось, если бы методы всегда перебирали элементы, а свойства - возвращали готовое значение. А так нужно всегда запоминать специальное поведение в специальных случаях, написанное где-то в глубине статьи мелким шрифтом.Жалкая попытка оправдать свою глупость. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 10:45 |
|
Как поступить, если очень хочется использовать LINQ и конструкторы с параметрами?
|
|||
---|---|---|---|
#18+
skyANAuser7320Стоит, однако, заметить, что это довольно неоднозначное поведение. Мне бы больше понравилось, если бы методы всегда перебирали элементы, а свойства - возвращали готовое значение. А так нужно всегда запоминать специальное поведение в специальных случаях, написанное где-то в глубине статьи мелким шрифтом.Жалкая попытка оправдать свою глупость. Я не пытаюсь оправдать свою глупость. То, что я глуп, видно и так - с этим глупо спорить. Я уже разобрался, как это работает. Меня теперь больше интересует мой последний длинный пост - я всё же там прав или нет, по-вашему? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2013, 10:48 |
|
|
start [/forum/topic.php?fid=17&msg=38419020&tid=1349912]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 148ms |
0 / 0 |