Что такое Entity Framework с POCO

В чем преимущество использования POCO? Я не понимаю смысла Персистирующего Неведения, что это значит? Что объект poco не может выставлять такие вещи, как "Сохранить"? Я не могу обернуть голову вокруг этого POCO, что вокруг много шума.

В чем разница с генерируемыми EF объектами и POCO?

Ответ 1

POCO означает "Обычный Старый объект С#" или "Обычный объект CLR", в зависимости от того, кого вы спрашиваете. Если структура или API заявляет, что она работает на POCO, это означает, что она позволяет вам определить вашу объектную модель idiomatically без необходимости создания ваших объектов наследовать от определенных базовых классов. Вообще говоря, рамки, которые работают на POCO, позволяют вам больше свободы и контроля над дизайном и внедрением ваших классов, потому что у них меньше требований к правильной работе.

Неспособность сохранения означает, что, насколько это возможно, что-либо в вашем коде, работающем на уровне бизнес-логики или выше, ничего не знает о фактическом дизайне базы данных, о том, какой механизм базы данных вы используете, или о том, как и когда объекты извлекаются от или сохраняться в базе данных. В случае MEF несоблюдение персистентности достигается при работе с POCO и использовании LINQ для выполнения запросов (т.е. Не требуя от пользователя создания каких-либо SQL-запросов для извлечения желаемых объектов).

Это открытый вопрос, но он в целом согласился с тем, что в большинстве случаев объекты домена (или бизнес-объекты - в любом случае, упомянутый выше POCO) должны быть не осведомлены о логике сохранения. Значение, вместо вызова MyBusinessObject.Save(), у вас есть класс менеджера или адаптера ввода-вывода, и вы вызываете Manager.Save(MyBusinessObject). Таким образом, вы избегаете подвергать семантике персистентности вашим бизнес-объектам - вы улучшаете разделение проблем таким образом.

Ответ 2

POCO = Обычные старые объекты CLR.

Обычные старые объекты CLR (то есть С# или VB) означают, что я могу говорить на С# или VB все время, когда я пишу свою программу, и не нужно беспокоиться об эзотерическом языке базы данных, например

UPDATE MYTABLE SET MYFIELD1 = @MYPARAMETER1, MYFIELD2 = @MYPARAMETER2 BLAH BLAH

EF Сгенерированные объекты == POCO, связанный (косвенно) с базой данных.

Ответ 3

Класс POCO - это класс, который не зависит от какого-либо базового класса, специфичного для конкретной инфраструктуры. Это похоже на любой другой обычный класс .net, поэтому он называется "Обычные старые объекты CLR", Эти объекты POCO (также известные как объекты, не поддерживающие сохранение) поддерживают большинство тех же запросов LINQ, что и производные объекты EntityObject.

Ответ 4

POCO = Обычные старые объекты CLR

Преимущества POCO:

Технология Агностицизм - это блаженство:. Эта концепция обычно вращается вокруг PI (Persistence Notorance), но это не только. Сохранение Незнание означает, что ваши сущности должны быть очищены от каких-либо ограничений, связанных с постоянством, которые накладывают на вас рамки - обычно ORM. Это, например, если у вас есть сопоставление уровня атрибута, где эти атрибуты не являются частью вашего домена, но есть только потому, что какая-то инфраструктура хочет, чтобы они были там, то ваш домен не является ненасыщенным. Сидар сказал здесь