Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Базы данных под .NET > Цикл статей по Entity Framework |
Автор: Idsa 10.3.2009, 08:57 |
Уважаемые винградовцы, разрешите представить Вашему вниманию мои статьи по Entity Framework. Цикл статей "Влюбляемся в Entity Framework": 1. http://alexidsa.blogspot.com/2009/03/entity-framework-1-ef.html 2. http://alexidsa.blogspot.com/2009/03/entity-framework-2-ef.html 3. http://alexidsa.blogspot.com/2009/03/entity-framework-3_16.html 4. http://alexidsa.blogspot.com/2009/03/entity-framework.html 5. http://alexidsa.blogspot.com/2009/05/entity-framework.html Продолжение следует. Серия статей "Entity Framework 4": 1. http://alexidsa.blogspot.com/2009/06/entity-framework-4-1-pluralization-ddl.html Продолжение следует. |
Автор: thomas 10.3.2009, 10:51 |
Idsa,![]() ![]() |
Автор: Idsa 10.3.2009, 12:50 | ||
thomas, когда писал фразу
, вспомнил о тебе ![]() |
Автор: jonie 10.3.2009, 23:04 |
Idsa скринкасты, нам нужны скринкасты 8)) (тока не в wmv, флеш имхо лучше)) выложи материал на habrahabr.ru - так тебя узнает много (зачастую неадекватного)) народу)) |
Автор: Idsa 11.3.2009, 06:42 |
Не, я уж как-нибудь постаринке ![]() А оно мне надо? ![]() С другой стороны, блог у меня в зародышевом состоянии, читателей практически нет, соответственно нет и комментов (а писать в режиме "монолог" не очень прикольно). В общем, я еще думаю ![]() |
Автор: Idsa 20.3.2009, 19:24 |
Добавлены новые статьи: 3. http://alexidsa.blogspot.com/2009/03/entity-framework-3_16.html 4. http://alexidsa.blogspot.com/2009/03/entity-framework.html |
Автор: thomas 21.3.2009, 10:28 |
Idsa, Спасибо. ![]() Читаю с интересом. Ждем продолжения. Успехов во всем. ![]() |
Автор: -Mikle- 21.3.2009, 11:11 |
Idsa, спасибо, мне тоже интересно почитать ![]() |
Автор: Idsa 21.3.2009, 16:04 |
Спасибо за позитив ![]() ![]() Но еще больше мне бы хотелось услышать критику: ошибки, опечатки, что не понравилось и т. д. |
Автор: Idsa 23.3.2009, 09:04 |
Правду говорят: власть портит людей ![]() |
Автор: thomas 23.3.2009, 14:39 |
Idsa, ![]() Ты не спрашивай, а статьи пиши дальше. ![]() Добавлено через 1 минуту и 35 секунд Да, кстати поздравляю с назначением на столь ответственный пост. ![]() Будь умненьким и благоразумненьким, как говорил папа Карло. ![]() |
Автор: Idsa 23.3.2009, 18:37 |
Думаю, следующая статья будет в лучшем случае через пару недель. У меня кругом дедлайны... |
Автор: SpaceSpace 30.3.2009, 13:02 |
Idsa, может про Sync Framework тоже заодно напишеш? ![]() |
Автор: Idsa 30.3.2009, 13:10 |
SpaceSpace, очень вряд ли ![]() |
Автор: PashaPash 8.4.2009, 18:02 |
Idsa, раз уж в соседнем топике Linq To Sql обозвали мертворожденным...Можно заказать тему для слудющией статьи? В последнее время MS наконец-то стало на рельсы TDD, а прогонять unit-тесты на коде, жесто связанным с базой неприятно и долго - и разработчики просто начинают на тестирование забивать... вобщем, хочу статью по реализации простой реализации паттерна Repository и Persistence Ignorance в EF, желательно в сравнении с Linq To Sql. |
Автор: Idsa 8.4.2009, 19:16 |
PashaPash, подобный пост у меня запланирован... но, к сожалению, это будет совсем не скоро. |
Автор: PashaPash 8.4.2009, 19:38 |
Idsa, ну можно хоть немного поднять ему приоритет? ![]() |
Автор: Idsa 8.4.2009, 19:39 |
PashaPash, сделано ![]() |
Автор: Sharki 8.4.2009, 20:11 |
Спасибо за интересные статьи.А на каком месте в очереди тема Sync Framework ,Особенно тема Sync Framework + DB. Для меня это сейчас очень актуально.Может передвините её поближе. |
Автор: Idsa 8.4.2009, 20:13 |
У меня даже планов нет об этом писать ![]() |
Автор: Sharki 8.4.2009, 20:40 |
![]() |
Автор: Idsa 8.4.2009, 20:45 |
Sharki, так вот и возьмитесь постингом по этой теме ![]() |
Автор: Sharki 8.4.2009, 20:52 |
Спасибо Idsa,но я ещё не дорос чтоб свои статьи писать.Мне самому ещё помощь нужна.Но за предложение спасибо. |
Автор: Partizan 8.4.2009, 21:23 |
![]() Idsa, а я бы хотел услышать побольше об использовании MS Azure Services, можно и мой заказ на статью поместить в очередь? ![]() |
Автор: PashaPash 8.4.2009, 22:03 |
Idsa, дай им палец - сожрут целиком. |
Автор: SLeN 24.5.2009, 12:56 |
В приложенном http://www.savefile.com/files/2033418 к второй статье скрипт создает пустую БД, таблицы Addresses и Persons отсутвуют. |
Автор: Idsa 24.5.2009, 14:37 |
Пофиксил ![]() Теперь вместо скрипта бэкап. И залил я его на этот раз на dropbox: http://dl.getdropbox.com/u/957029/Developing/Blog/%D0%92%D0%BB%D1%8E%D0%B1%D0%BB%D1%8F%D0%B5%D0%BC%D1%81%D1%8F%20%D0%B2%20Entity%20Framework%20%D0%A8%D0%B0%D0%B3%20%D0%B2%D1%82%D0%BE%D1%80%D0%BE%D0%B9%20%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0%20EF/FirstModel.bak |
Автор: SLeN 26.5.2009, 13:01 |
Не знаю в правильном ли месте постю инфу, но : очень помогает в освоении книжка "Programming Entity Framework by Julia Lerman" (eng) (можно найти и в электронном варианте) Достаточно четко все изложено и куча примеров кода. примеры кода по книге можно взять http://learnentityframework.com/LearnEntityFramework/downloads/ |
Автор: Idsa 31.5.2009, 22:08 |
Опубликовал пятую часть: http://alexidsa.blogspot.com/2009/05/entity-framework.html |
Автор: Idsa 8.6.2009, 10:35 |
Цикл статей "Влюбляемся в Entity Framework" временно приостановлен. В ближайшее время буду заниматься серией статей по Entity Framework 4. Предлагаю Вашему вниманию первую часть: http://alexidsa.blogspot.com/2009/06/entity-framework-4-1-pluralization-ddl.html |
Автор: Idsa 8.6.2009, 11:40 |
PashaPash, помнится ты заказывал статью о реализации паттернов Repository и Persistence Ignorance в EF, при этом намекая на то, что в LINQ To SQL дела с этим обстоят лучше. Так как моя компетенция в вопросе паттернов находится на низком уровне, прошу пояснить, чем в этом отношении LINQ To SQL выигрывает у EF v. 1. |
Автор: Idsa 8.6.2009, 21:48 |
PashaPash, задам наводящие вопросы: 1. Дело в POCO? 2. Дело только в POCO или в чем-то еще? 3. Может, POCO вообще ни при чем? Тогда что "при чем"? |
Автор: PashaPash 9.6.2009, 15:44 |
Idsa, дело в POCO. И вообще в возможности персистить произвольный класс. |
Автор: Idsa 9.6.2009, 17:26 |
PashaPash, а чем в этом отношении LINQ To SQL лучше EF v. 1? Только лишь тем, что L2S-сущности требует реализации интерфейса, а EF-cущности - наследования от базового класса (к слову, в EF v. 1 есть поддержка сущностей, реализующих интерфейс, а не наследующих базовый класс)? |
Автор: PashaPash 9.6.2009, 19:29 |
Idsa, L2S вообще не требует ничего от сохраняемого класса. Берешь POCO объект - и сохраянешь/загружаешь (могу пример скинуть для изучения). Т.е. он позволяет сделать CRUD-репозиторий для произвольных классов. А EF - требует определенного предка, навязывает tracking ... вобщем слишком сильно вползает в уровень BO/BE, и тянет на себя одеяло архитектуры. |
Автор: Idsa 9.6.2009, 22:08 | ||||
Будет очень кстати ![]()
Т. е. те интерфейсы, которые для классов реализует дизайнер, - необязательные? Что, даже навигационные свойства - не L2S-specific? |
Автор: PashaPash 10.6.2009, 09:40 | ||
ок, как доберусь до работы ![]()
Вообще весь файл, сгенеренный дизайнером - необязателен. Можно создать DataContext, подсунуть ему метаданные (XmlMappingSource в случае чистых POCO, AttributeMappingSource в случае не совсем чистых) - и все заработает. Если не нужен/не используется lazy load, то EntityRef/EntitySet не нужны, L2S вполне загружает связи в обычные свойства и List<T>. Минимализм и все такое. |
Автор: SLeN 10.6.2009, 10:31 |
![]() Уже не первый день с интересом слежу за развитием данной темы. ![]() |
Автор: Idsa 10.6.2009, 11:02 | ||
Это замечательно... но к чему этот смайлик? ![]() |
Автор: SLeN 10.6.2009, 12:59 |
этот смайлик относится к моей каше в голове по данной теме ![]() |
Автор: Idsa 10.6.2009, 13:00 |
Так а форум на что? ![]() |
Автор: SLeN 10.6.2009, 13:02 |
я книжки пока читаю "Nhibernate In Action" |
Автор: Idsa 15.6.2009, 06:35 |
На тот случай, если кто-то ждет (ну а вдруг ![]() ![]() PashaPash, ты не мог бы закидать меня ссылками по поводу того, как неPOCO негативно влияет на юнит-тестирование и архитектуру в целом? А то ничего толкового по этому поводу найти не удалось... а у самого опыта в этом деле минимум. |
Автор: Idsa 15.6.2009, 07:33 |
Еще 5 копеек от меня ![]() Мне бы хотелось получить как можно больше мнений (особенно негативных) по поводу уже написанных статей. Что не понравилось? Что показалось не очень понятным? и т. д. По личной переписке знаю, что некоторые винградовцы почитывают мои статьи, поэтому прошу не стесняться в выражениях и говорить мне все, как есть (здесь, в личке, в комментах - хоть где) ![]() |
Автор: SLeN 15.6.2009, 16:23 | ||||
Лучше публично. И до сих пор ждем:
Правда это можно и погуглить, но сейчас катастрофически нет времени, так что очень хочется кратки и живой пример. |
Автор: PashaPash 15.6.2009, 16:41 | ||||
На юнит-тестирование - очень простое влияние. неPOCO (точнее, отсутствие Persistence Ignorance) требует базы данных для прогонки каждого теста. При этом: 1. Состояние базы должно быть одинаковым для каждого запуска 2. Результат не должен зависеть порядка запуска Этого довольно трудно достичь, а после достижения - легко поломать. Кроме того, базы данных - не слишком быстрая вещь, когда дело доходит до тестов. В результате тесты становится трудно писать, они долго выполняются, и девелоперы просто забивают на них. А в целом на архитектуру - очень размытое понятие. Напиши что-нибудь крупное на EF, узнаешь ;) Добавлено через 1 минуту и 8 секунд
Посмотри http://blog.wekeroad.com/subsonic/subsonic-30-the-simplerepository/ |
Автор: Idsa 16.6.2009, 07:37 | ||
Хм... А разве EF-сущности требуют базу данных для прогонки тестов? ![]() |
Автор: PashaPash 18.6.2009, 13:58 | ||||
Ок, простой пример.
Как должен выглядеть CustomerService.CreateCustomer в случае EF? Чтобы он работал во время тестов без базы, а в живой системе - с базой, и честно в нее сохранял без дополнительной пляски с бубном. |
Автор: SLeN 18.6.2009, 15:11 |
Как на счет Mock ? |
Автор: Idsa 22.6.2009, 07:59 |
PashaPash, так уж сложилось, что на данный момент я еще не овладел искусством Unit-тестирования... Видимо, именно поэтому даже после того, как ты привел пример, я не понимаю, в чем разница между POCO/неPOCO в данном случае. PashaPash, ты как-то заводил разговор о реализации Repository под EF v. 1... Вот блог-пост на эту тему: http://blog.keithpatton.com/2008/05/29/Polymorphic+Repository+For+ADONet+Entity+Framework.aspx |
Автор: PashaPash 22.6.2009, 11:29 |
Idsa, трудность как раз не в том, чтобы реализовать IRepostory, как по ссылке. Трудно реализовать точно такой же IRepository, но уже без EF - т.е. чтобы он корректно сохранял объекты-наследники EntityObject. Попробуй просто набросать код CreateCustomer в примере выше. С использованием репозитория по ссылке, но со второй половиной - работой того же кода без базы данных. SLeN, Mock - это хорошо, но тоже не слишком тривиально в случае EF. Приведешь пример? |
Автор: SLeN 22.6.2009, 11:35 |
Не, - я от Ef пока отказался в пользу Nhibernate. p.s. Меня интересует Object First (DDD) а Ef пока этого не позволяет + я влюбился в рефлекшн оптимизатор Nhibernate =) |
Автор: PashaPash 22.6.2009, 13:49 |
SLeN, а почему не в пользу родного L2S? |
Автор: SLeN 22.6.2009, 14:23 |
На мой взгляд Nhibernate более зрелая ( большинство проблем с которыми можно столкнутся в реальных проектах - уже столкнулись и решили), за многие годы в нее влилось куча гениальных решений (как я уже говорил один только рефлекшн оптимизатор чего стоит), + у её поведение для меня понятно на интуитивном уровне (тоесть - еслибы я участвовал в разработке некой ORM то использовал бы очень похожие решения). Я пока с ней только осваиваюсь, но еще не было случая когда бы она меня огорчила =) |
Автор: Idsa 22.6.2009, 14:27 |
SLeN, а что рефлекшн оптимизатор умеет? |
Автор: SLeN 22.6.2009, 14:55 |
Он умеет инжектировать свой код в классы тем самым используя рефлексию только 1 раз при запуске, а после через инжектированый код добираться до приватных членов - тем самым позволяя бизнес уровню поддерживать инкапсуляцию несмотря на использование ORM. |
Автор: PashaPash 23.6.2009, 01:01 |
SLeN, эта куча гениальных решений точно так же влилась в Linq2SQL + добавилась нормальная поддержка Linq. Linq to SQL тоже использует кодогенерацию "один раз при запуске" и потом заливает данные прямо в приватные члены, без рефлекшена. Просто MS не выпячивал это как супер-рефлекш-оптимайзер. Поработай с L2S немного, он намного интуитивнее остальных ORM. Все ORM одинаковы - это реализация одного и того же паттерна, отличаются только детали. Насчет зрелости NHibernate - прошел год (!!!) от релиза .net 2.0 до поддержки 2.0, nullable и generics со стороны NHibernate. Полноценной поддержки Linq, на том уровне, на котором она есть в L2S (выборка только использованных в коде полей, лямбды, вылизанная кодогенерация) придется ждать еще года полтора. А в L2S это все появилось уже полтора года назад. Много всяких "рефлекш оптимайзеров и инжектирований кода" в нем уже работает, проверено на куче реальных проектов. NHibernate обречен ползти в хвосте, по довольно очевидным, но независящим от него причинам. |
Автор: SLeN 23.6.2009, 10:08 | ||
HQL позволяет
вылизанная кодо генерация тоже присутствует. лямбд - да не встречалось, но я пока использую версию 1.20 и не смотрел чего в 2.0 запихнули ;) но и в 1.20 достаточно много стратегий выборки - HQL, QBC, QBE В общем хочется пока поиграть с этой игрушкой =) , тем более что она очень гибкая и поддерживает кучу стратегий, ну а после того как почувствую себя в ней достаточно уверенно - взглянуть на остальное, к томуже будет уже с чем сравнивать |
Автор: PashaPash 23.6.2009, 11:06 | ||||||||
Голый SQL тоже позволяет выбирать только определенные свойства. Вся разница в уровне. HQL позволяет это делать в виде строго типизированного кода? что-то вроде
А в Linq 2 SQL - одна - LINQ, и она рвет эти "много" с большим отрывом. За счет преобразования кода C# в SQL запросы.
Сначала нужно смотреть стандартные - встроенные в framework - вещи. А не порты с java, отстающие в развитии на 3 года. |
Автор: SLeN 23.6.2009, 11:37 | ||
PashaPash,
бес понятия я еще не работал с этой возможностью. тоже прокомментировать не могу, по той же причине - я еще в плотную не работал с этим думаю нужно отложить продолжение дискуссии Nhibernate vc L2S на какоето время, так как я пока не подходящий оппонент ![]() |
Автор: Idsa 23.6.2009, 11:46 |
Думаю, не ошибусь, если предположу, что это был риторический вопрос ![]() ![]() |
Автор: SLeN 23.6.2009, 12:08 |
Решил таки не пренебрегать советами и ознакомиться с L2S и уж после сделать выбор в сторону одной из технологий |
Автор: Idsa 24.6.2009, 11:52 | ||
Это как? ![]() |
Автор: PashaPash 24.6.2009, 13:43 | ||
Idsa, в приватные - потому что есть аттрибут маппинга DataAttribute.Storage, который Gets or sets a private storage field to hold the value from a column. За кодогенерацию записи значения в поле отвечает System.Data.Linq.SqlClient.ObjectReaderCompiler+Generator.GenerateStoreMember, в MemberInfo спускается отрефлекченное поле с именем DataAttribute.Storage
OpCodes.Stfld вполне так сторит значение в private field. Вот примерно так. |
Автор: vlsaf 13.11.2009, 14:36 |
А можно ли вызывать хранимые процедуры, используя EF? Дело все в том, что нужно отфутболить уже наработанную бызу в облако. В базе есть хранимки, которые делают некие бизнес - операции. И очень не хотелось бы это все переписывать. Это первое. А второе. Также есть для некоторых таблиц хранимые процедуры, отвечающие за валидные операции. Например имеется таблица Adress. И для нее четыре хранимые процедуры. Adress_Insert Adress_Select Adress_Update Adress_Delete Причем внутри хранимок также есть некий анализ на непротиворечивость данных с другими таблицами. Вот и вопрос. Можно ли существующие хранимые процедуры использовать в EF? |
Автор: Idsa 13.11.2009, 19:04 |
vlsaf, на оба вопроса ответ "да, но...". Буду говорить о EF v1, ибо не знаком с этими аспектами EF4. 1. Да вызывать хранимые процедуры можно, но красиво (через ObjectContext) это можно сделать не со всеми (зависит от возвращаемого значения). Подробности в гугл "EF stored procedures". 2. Можно назначить хранимые процедуры для операций Update/Insert/Delete. С Select'ом не прокатит - придется делать вручную. |
Автор: coddy 10.3.2010, 18:40 |
Доброго времени суток! Подскажите с таким вопросом: Есть спискок объектов EF (v4) который получается выборкой из БД. И отображается в DataGridView (на данный момент winforms, но думаю скоро переделаю на WPF). Как после изменения данных в гриде, занести эти изменения в БД? |
Автор: DenWPF 10.5.2011, 08:51 |
coddy тема называется "Цикл статей по Entity Framework" ! Прошу больше статей по EF 4 |