В Entity Framework есть возможность объявить абстрактные типы в EDM модели (файл .csdl) , но создать экземпляры таких типов нельзя, зато можно от них наследоваться. Фактически, типы могут быть помечены, как абстрактные в дизайнере. Во время выполнения абстрактные типы могут выступать базовыми для множества разных наборов сущностей (представьте себе ситуацию, когда вам нужен один базовый тип для всех сущностей в нескольких наборах данных). Более подобную информацию смотрите в описании элемента EntityType (язык CSDL).
Сложный тип в Entity Framework – это название для типов, которые имеют более сложную структуру, нежели скаляры. Типовой пример – это тип Адрес, который состоит из нескольких частей (область, город, улица и тд.) Сложный тип отчасти похож на обычную сущность, за исключением того, что они не имеют идентификаторов (являются типами значений). Это обозначает, что сложные типы не могут существовать сами по себе, всегда являются частью других сущностей или сложных типов, не могут учувствовать в ассоциациях и тд. Entity Framework поддерживает сложные типы но с некоторыми ограничениями при сопоставлении: наследование не поддерживается (наследование возможно для сущностей, но не для сложных типов), значение не может быть NULL и может существовать в отдельных экземплярах, но не в коллекциях. Более подробную информацию смотри на MSDN’е: сложный тип (модель EDM).
Entity Framework поддерживает несколько наборов сущностей на тип, то есть вы можете определить модель которая содержит более одного набора сущностей с одним и тем же базовым типом. Это очень важно, потому что позволяет создавать модели, которые более похожи на модели БД. Если у вас есть две таблицы с одинаковой структурой, например "accounts" и "expired_accounts", вы можете определить набор сущностей для каждой таблицы используя один тип сущности, вместо того, чтобы плодить типы с одинаковыми наборами полей. Более полную информацию вы можете посмотреть в разделе MSDN Элемент Entity Set (CSDL). Тем не менее, создание нескольких наборов сущностей на тип добавляет сложности вашей модели и редко используется на практике. Как результат, дизайнер и некоторые новые функции, которые добавляются в EF, такие как ObjectSet, все меньше опираются или полностью не поддерживают несколько наборов сущностей на тип. Обычно рекомендуется ограничиваться одним набором сущностей на каждый тип.
Entity Framework поддерживает ассоциации между подтипами. Это значит, что вы можете определять ассоциации между любыми типами в иерархии, даже если они не являются базовыми. Например, если у вас есть иерархия типов, которая включает Customer и BigAccountCustomer, вы можете создать тип сущностей DiscountPolicy и связать его с BigAccountCustomers, при этом Customers не будет связан с DiscountPolicies.
Следует отметить, что WCF Data Services в данный момент не поддерживает сопоставление между подтипами. При использовании Data Services все ассоциации необходимо определять на уровне базовых типов.
Да. EDM поддерживает GUID в качестве примитивного типа. Вы можете использовать GUID в качестве колонки или первичного ключа в концептуальной модели. Посмотрите Работа с ключами сущностей для получения более детальной информации об использовании GUID и EntityKeys.
Пока нет. Но в beta версии EF 5 уже включена поддержка перечислений. А здесь еще один способ обойти отсутствие перечислений в EF4 описанный Alex James: Tip 23 - How to fake Enums in EF 4.
Чтобы удалять объект и все связанные и ним сущности можно определить правила каскадного удаления ка�� на уровне модели так и в базе данных. Чтобы избегать неожиданных результатов рекомендуется определять правила каскадного удаления и там и там.
При добавлении правил каскадного удаления объектов следует помнить:
В следующем блоге разъясняется почему следует прописывать правила каскадного удаления как в модели так и в базе данных: http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx.
Кроме этого, посмотрите раздел Cascade Delete Rules в статье на MSDN' Creating, Adding, Modifying, and Deleting Objects (в русском переводе этот раздел отсутствует).
Да. Entity Framework позволяет сохранять файлы метаданных в качестве ресурсов в сборках; в строке подключения вы можете указать Entity Framework, что файлы находятся внутри. Для этого нужно добавить файлы CSDL, MSL и SSDL в ваш проект и установить для каждого из них свойство "Build Action" (Действие при построении) в "Embedded Resource"(Внедренный ресурс). После чего измените сроку подключения. Вам не обязательно указывать все файлы метаданных, можно просто добавить "metadata=res://*/;" что укажет EF искать соответствующие ресурсы в приложении и связанных сборках. Более детальную информацию смотрите в разделе MSDN Строки соединения (платформа Entity Framework). Единственное, о чем следует побеспокоиться, чтобы сборки с ресурсами были загружены в том же домене приложения, где происходит подключение к базе данных.
Дизайнер EDM использует файл EDMX чтобы хранить все метаданные о моделях. Он включает в себя CSDL, MSL и SSDL файлы в различных секциях. Во время выполнения системе нужны три отдельных файла и во время компиляции проекта они автоматически создаются в папку приложения или внедряются в качестве ресурсов в сборку.
<Using> используется в файлах метаданных: модели могут определяться в нескольких файлах CSDL—чем-то похоже на оператор "using" в файлах C#, который позволяет включать функции из другого пространства имен, или #include в C/C++ программах. Более детальную информацию смотрите в разделе MSDN Элемент Using (язык CSDL). Следует сказать, что эта функция позволяет включать файлы только в CSDL, а MSL и SSDL файлы не поддерживаются. Это достаточно ограниченная в применении функция и большинство программистов не используют ее, так что можете ее игнорировать.
EF не поддерживает запросы между несколькими контекстами объектов (o-space) или подключениями (c-space). Более того, не поддерживается сопоставление на более чем одну базу данных (когда будет реализована эта функция, можно будет создавать контекст из нескольких баз данных).
Есть два способа решения:
В файлах CSDL существует поддержка пользовательских аннотаций, которые игнорируются EF, но могут использоваться различными инструментами которые работают с EDM. Эти аннотации доступны в API метаданных, но все равно не используются.
Содержание EF FAQ