powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Что новенького в EF 6.1?
25 сообщений из 648, страница 1 из 26
Что новенького в EF 6.1?
    #38697221
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EF 5 стойко отбил охоту использовать классы в роли свойств объектов. Вместо этого хранил в свойстве GUID, ну а где искать - приходилось помнить, да. Но там всё было просто. clientID,goodsID - и всё такое.

Треш конечно, но большим трешем казалось при сохранении объекта в _НОВЫЙ_ контекст - вытаскивать в этот новый контекст все _существующие_ свойства.

Иначе EF пытался добавить эти объекты как новые, соответственно - эксепшн.

CF - как бы подталкивает юзать UoW - соответственно - объекты "гуляют" по контекстам - как у себя дома.

Вопрос - в текущих версиях EF это как-то изменилось? Можно по взрослому - вместо гуидов использовать классы и модно лениво загружать свойства через точку? Хотя в последнем случае при использовании UoW пролетаем как фанера...
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697231
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique,

LazyLoad работал с первой версии.

Объект принадлежит одному контексту. Можно объект от контекста отцепить и прицепить к другому. Ели связанные загружены - сделать с ними тоже самое. Хотя неясно зачем.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697234
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueТреш конечно, но большим трешем казалось при сохранении объекта в _НОВЫЙ_ контекст - вытаскивать в этот новый контекст все _существующие_ свойства.

делаете Attach, хотя сама процедура заталкивания объекта в новый контекст довольно ущербна. какой в этом смысл? но даже если он и есть, повторюсь, делаете Attach.

лениво давным давно всё загружается, а если и не лениво, то по требованию. ну и нормализацию никто не отменял.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697239
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas,

У объекта 25 свойств. Я вынимаю объект из контекста и читаю 10. Одно изменяю. Старого контекста уже нет. Теперь мне надо записать объект. Я так понимаю - мне необходимо "прицепить" к новому контексту - все 25 свойств.

А вот в случае с простыми типами - об этом вообще думать не надо.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697257
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique,

Почему старого контекста нет?
Для аттача объекта к контексту нужен только ключ.
А еще можно расширением воспользоваться, которое позволяет dml запросы делать.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697264
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueУ объекта 25 свойств. Я вынимаю объект из контекста и читаю 10. Одно изменяю. Старого контекста уже нет. Теперь мне надо записать объект. Я так понимаю - мне необходимо "прицепить" к новому контексту - все 25 свойств.

А вот в случае с простыми типами - об этом вообще думать не надо.

значит так. EF это ORM. концепция ORM подразумевает не только мэппинг, но и абстракцию: объект, это совокупность значений его полей и связей.

многие, пришедшие из мира SQL, недоумевают, типа зачем же мне вытаскивать весь объект из базы, если мне нужно всего несколько полей или я собираюсь изменить всего одно-два поля.

это примерно как недоумевать, зачем приходит весь человек, если я хочу с ним поговорить, он мог бы прислать мне только свои уши и язык.

ORM это всегда некоторое снижение производительности, не считая полу-ORM, граничащих по скорости с чистым ADO, где теряется половина смысла (т.е. остаётся только чистый мэппинг полей). используя полноценный ORM необходимо смириться с тем, что работаешь с цельными объектами, и научиться извлекать из этого выгоду. чтобы избегать лишних накладных расходов, надо стремиться к нормализации. т.е. 20 и выше полей, это уже звоночек -- может стоит разбить объект на более конкретные сущности.

даже используя ORM, могут найтись узкие места, где абстракция цельного объекта не прокатит, там и надо применять прицельный SQL (или хранимки), но для этого должны найтись весомые причины (например, после профилирования). а так, раньше времени переживать о том, что дёргается весь объект ради пары полей совершенно не стоит.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697279
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

сначала надо понять что есть Объект, а то может быть такое что тебе придется ВСЮ БД вытянуть :)
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697286
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosсначала надо понять что есть Объект, а то может быть такое что тебе придется ВСЮ БД вытянуть :)

для операции Бекап, так оно и есть
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697307
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Я абсолютно не переживаю о том, что дергается объект ради пары свойств. Тут даже больше подходит "плевать". До поры до времени, конечно, но - плевать.

Я о другом.

Если я объекта, допустим order добавлю поле <Guid>clientID, то код, сохраняющий order в context не изменится.
db.DbSet<order>.add(order) ну или что то типа такого.

Ну а если у ордера я создам поле типа <Client>client - то так просто уже не отделаться.
Надо искать этого клиента в контексте - добавлять, если его там нет and so on...

Почему EF не берет это на себя?
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697317
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttмногие, пришедшие из мира SQL, недоумевают, типа зачем же мне вытаскивать весь объект из базы, если мне нужно всего несколько полей или я собираюсь изменить всего одно-два поля.

это примерно как недоумевать, зачем приходит весь человек, если я хочу с ним поговорить, он мог бы прислать мне только свои уши и язык.

Все аналогии лживы.

Все ORM c поддержкой Linq позволяют написать проекцию и вытащить ровно столько полей сколько нужно. Тащить все поля все - путь к тормозящему приложению.

Как раз хранимки чаще страдают этим недостатком. Поддерживать 100500 хранимок с одинаковыми или почти одинаковыми предикатами, но разными проекциями на практике никто не хочет, поэтому делают "универсальные" хранимки, которые тянут больше чем необходимо на каждый запрос.

Для изменения данных тоже не нужны целые объекты. В EF (с помощью расширения) и Linq2DB (изкаропки) можно сделать update\insert\delete, не затягивая целый объект.

НО!
Куча инструментов в .NET работает только с объектами - model binding и data binding например. В этом случае change tracking в ORM помогает избавится от тонны кода для меппинга. Change tracking при этом работает только с целыми объектами.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697318
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiquehVostt,
Если я объекта, допустим order добавлю поле <Guid>clientID, то код, сохраняющий order в context не изменится.
db.DbSet<order>.add(order) ну или что то типа такого.

Ну а если у ордера я создам поле типа <Client>client - то так просто уже не отделаться.
Надо искать этого клиента в контексте - добавлять, если его там нет and so on...

Почему EF не берет это на себя?

А зачем?
Ты можешь создать оба свойства и использовать то, которое удобнее. Или ты пишешь в поле ClientId, а после этого хочешь получить значение из объекта в свойстве Client?
В каком случае такое может понадобиться?
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697322
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasВсе аналогии лживы.

„Everybody lies“

gandjustasВсе ORM c поддержкой Linq позволяют написать проекцию и вытащить ровно столько полей сколько нужно. Тащить все поля все - путь к тормозящему приложению.

позвольте спросить. на сколько тормозящему? вы лично сами замеряли потерю производительности? на сколько она существенна? или это все личные бредовые фантазии, и, как обычно, экономия на спичках?

gandjustasДля изменения данных тоже не нужны целые объекты. В EF (с помощью расширения) и Linq2DB (изкаропки) можно сделать update\insert\delete, не затягивая целый объект.

можно, но не нужно. если не нравится работать с объектами, не трогайте LINQ, EF и возвращайтесь к SQL.

да, можно вытащить столько полей, сколько нужно. но такое может действительно потребоваться, чтобы вытащить соединённый срез данных, или вытащить большую коллекцию чего-то конкретного, и даже в этом случае применяются DTO, и для этого должен быть смысл. но если мы говорим о конкретной записи, то это должен быть целый объект, а не какие-то поля. как их упаковать и передавать, принимать? анонимными объектами? может в DataTable? и много сэкономите? очень сомневаюсь.

короче бред не несите. определённо вы взялись за инструмент, смысла которого до конца ещё не понимаете.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697323
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueПочему EF не берет это на себя?

какие проблемы?

вот объект:

Код: 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.
public class Order
{
   public Guid Id {get;set;}
   ...
   public Guid ClientId {get;set;}
   public virtual Client {get;set;}
   ...
}

...

// можно так:

var order = new Order
{
   ...
   Client = new Client()
   ...
}

// или так

var order = new Order
{
   ...
   Client = clientFromContext
   ...
};

// и вот так

var order = new Order
{
    ...
    ClientId = someGuidOfClientFromOtherContext
    ...
}



в последнем случае, сам объект клиента вам не нужен и его не потребуется вытаскивать из контекста, если вам ClientId известен, EF прекрасно вас поймёт.

т.е. можно в объекте хранить как навигационное свойство (virtual Client), так и ключ (Guid ClientId) вместе. более того, если вы укажете вот такой ключ с вопросом: Guid? то связь будет не обязательная (по правилам конвенкции EF).

естественно, я говорю о Code First.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697324
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

а как там с правами доступа на большие композитные объекты?
допустим есть Объект Самолет(фюзеляж, хвост, крыля)
как то можно задать что бы прогер или кто то там не имел права к крылям? но при это мог бы с самолетом или доступными частями поизголяться?
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697325
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

а что будет при сохранении, если в твоем примере ClientId заменить на ClientId нового клиента, а старого Client с ClientId старым удалить
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697327
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosа что будет при сохранении, если в твоем примере ClientId заменить на ClientId нового клиента, а старого Client с ClientId старым удалить

я же спать собирался!
не знаю, честно.
даже не задумывался об этом никогда.
всегда именно так делал, и проблем не испытывал.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697328
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosа как там с правами доступа на большие композитные объекты?
допустим есть Объект Самолет(фюзеляж, хвост, крыля)
как то можно задать что бы прогер или кто то там не имел права к крылям? но при это мог бы с самолетом или доступными частями поизголяться?

а при чём тут EF? :)
это уже вопросы к бизнес-логики и слоя доступа к данным, который реализуется поверх EF.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697329
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

а ты ради интереса еще раз как проснешьсяи найдешь время пробуй, мне очень интересно
и справами и с консистентым кешем при некоторых ограничениях (уникальность и т.д.)
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697330
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttViPRosа как там с правами доступа на большие композитные объекты?
допустим есть Объект Самолет(фюзеляж, хвост, крыля)
как то можно задать что бы прогер или кто то там не имел права к крылям? но при это мог бы с самолетом или доступными частями поизголяться?

а при чём тут EF? :)
это уже вопросы к бизнес-логики и слоя доступа к данным, который реализуется поверх EF.
нифига не понял
а разве модель еф не доступна прогеру?
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697332
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот прочел я объект Самолоет и хочу ее почикать, а прав на крылев то и нет
кто нить мне запретить как нить что бы я воще самолет не трогал?
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697334
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosнифига не понял
а разве модель еф не доступна прогеру?

распространённая практика делать интерфейс репозитория, имплементировать его через EF, а поверх репозитория делать ещё сервисный слой с бизнес-логикой. так что прогер обычно напрямую с EF Дела не имеет. если это конечно не курсовая, или не личный бложек, где используется детская студенческая конструкция типа using(var dbContext = new MyContext()) { ... }.

задача EF, скрыть механизм непосредственного доступа к данным (т.е. абстрагироваться от базы данных).

а свой слой репозитория нужен ещё и для целей тестирования (а не для того, чтобы отцепиться от EF, хотя в идеале это так).

объектная модель конечно доступна проггеру, но не DbContext.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697336
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosвот прочел я объект Самолоет и хочу ее почикать, а прав на крылев то и нет
кто нить мне запретить как нить что бы я воще самолет не трогал?

это не в компетенции EF. хотя некоторые люди довольно не безосновательно считают, что модель row level security плохо реализуется с использованием EF и они колбасят свои собственные ORM-ы с блекждеком.
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697338
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosа ты ради интереса еще раз как проснешьсяи найдешь время пробуй, мне очень интересно

а чо пробовать, когда есть гугл?

http://coding.abel.nu/2012/03/ef-code-first-navigation-properties-and-foreign-keys/
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697341
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

ок спс посмотрю погуглю
а так там легкие тесты
...
Рейтинг: 0 / 0
Что новенького в EF 6.1?
    #38697342
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttпозвольте спросить. на сколько тормозящему? вы лично сами замеряли потерю производительности? на сколько она существенна? или это все личные бредовые фантазии, и, как обычно, экономия на спичках?
Более десятка раз значительно оптимизировал приложения просто прописыванием проекций в Linq. Дело не в объеме передаваемых данных, хотя бывает заметно при использовании больших текстовых полей, а в том что с проекциями проще использовать индексы.

hVosttможно, но не нужно. если не нравится работать с объектами, не трогайте LINQ, EF и возвращайтесь к SQL.
Вопрос не в том нравится или нет, а в эффективности программиста и написанного им кода.


hVosttда, можно вытащить столько полей, сколько нужно. но такое может действительно потребоваться, чтобы вытащить соединённый срез данных, или вытащить большую коллекцию чего-то конкретного, и даже в этом случае применяются DTO, и для этого должен быть смысл. но если мы говорим о конкретной записи, то это должен быть целый объект, а не какие-то поля. как их упаковать и передавать, принимать? анонимными объектами? может в DataTable? и много сэкономите? очень сомневаюсь.
Среднее бизнес-приложение имеет соотношение чтения\записи примерно 98\2. Для веб-сайтов разница обычно на порядок. Поэтому оптимизировать запросы имеет смысл всегда. DTO или DataTable не важно, важно какой запрос уйдет в базу.

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


hVosttкороче бред не несите. определённо вы взялись за инструмент, смысла которого до конца ещё не понимаете.
Я понимаю, что искать проблемы в собеседнике проще, чем аргументировать свою точку зрения. Но все таки на профессиональном форуме стоит прибегать к техническим аргументам.
...
Рейтинг: 0 / 0
25 сообщений из 648, страница 1 из 26
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Что новенького в EF 6.1?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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