среда, ноября 26, 2008

Как разделить EDM на несколько частей?

Похоже, народ начинает пробовать заюзать Entity Framework в реальных проектах. И начинает задавать неудобные вопросы.
Один из самых "горячих" вопросов: как разделить большую модель данных (EDM) на несколько частей. Я уже затрачивал этот вопрос в обсуждениях вот этого поста.
Суть моих рассуждений была такова: делите модель только если ее действительно можно разделить на несколько независимых частей. Иначе делайте большую общую модель и шарьте ее между всеми модулями системы.
Однако, большая модель это не только ценный мех не очень удобно, но это еще и проблемы с производительностью. И вот от разработчиков EF пришла благая весть: EDM все же можно делить на части так, что одна часть будет ссылаться и использовать классы другой части. Для этого есть чудесный аттрибут "using":


<Schema Namespace="NorthwindModel" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2006/04/edm">
<Using Namespace="NorthwindModelBase" Alias="BaseModel" />


Подробно о том, как разделить модель на несколько частей, с пошаговыми инструкциями написано в блоге разработчиков ADO.NET "Working With Large Models In Entity Framework – Part 2"

Есть однако одна неприятная деталь. Точнее две.
Первая, подключаемые модели традиционно не поддерживает дизайнер EDM. Но это можно пережить.
Вторая, модели могут ссылаться друг на друга только в одном направлении, а это автоматически означает, что navigation property, а иными словами, ссылочные свойства на объекты в другой модели запрещены. И это уже плохо. Вернемся к началу моего поста, где я говорил о том, что делить модель на части можно только если эти части не зависимы. Выходит, к сожалению, я был все же прав.