2014-08-30 4 views
2

Я хочу использовать первый подход модели для создания базы данных с Entity Framework. Я также хочу использовать несколько схем базы данных. Есть ли возможность создать дополнительные схемы базы данных (например, «безопасность») вместе с дефолтом «dbo»?Несколько схем баз данных в модели EF сперва

Я также задался вопросом, почему после выполнения команды «Создать базу данных из модели» мои атрибуты схемы EntitySets в SSDL-части .edmx-файла сбрасываются обратно в «dbo».

<?xml version="1.0" encoding="utf-8"?> 
<edmx:Edmx Version="3.0" mlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx"> 
    <!-- EF Runtime content --> 
    <edmx:Runtime> 
    <!-- SSDL content --> 
    <edmx:StorageModels> 
    <Schema Namespace="ThewiseModel.Store" Alias="Self" provider="System.Data.SqlClient" ProviderManifestToken="2012" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl"> 
    <EntityContainer Name="ThewiseModelStoreContainer"> 
    <EntitySet Name="PermissionTypes" EntityType="ThewiseModel.Store.PermissionTypes" store:Type="Tables" Schema="Security" /> 
    <EntitySet Name="PermissionValues" EntityType="ThewiseModel.Store.PermissionValues" store:Type="Tables" Schema="Security" /> 
    <EntitySet Name="Roles" EntityType="ThewiseModel.Store.Roles" store:Type="Tables" Schema="Security" /> 
    <EntitySet Name="Users" EntityType="ThewiseModel.Store.Users" store:Type="Tables" Schema="Security" /> 
    <EntitySet Name="Memberships" EntityType="ThewiseModel.Store.Memberships" store:Type="Tables" Schema="Security" /> 
... 
+2

не пытается троллить, но EDMX и EF являются полная неразбериха. Уходите, если сможете. – Andomar

ответ

0

Насколько я могу судить, это невозможно в модели с первым использованием EDMX. Дизайнер EDMX поддерживает только одно поле «Имя схемы базы данных» для всей модели в окне «Свойства».

Как вы нашли, вы можете отредактировать EDMX вручную, чтобы взломать имена схем там. Однако, когда вы создаете DDL из этой модели (щелкните правой кнопкой мыши, «Генерировать базу данных из модели»), похоже, только частично используют правильные имена схем. Сценарий заканчивается использованием имен схем в некоторых разделах, но не в других:

-- -------------------------------------------------- 
-- Dropping existing tables 
-- -------------------------------------------------- 

IF OBJECT_ID(N'[yourSchema].[YourTable]', 'U') IS NOT NULL 
    DROP TABLE [yourSchema].[YourTable]; 

-- -------------------------------------------------- 
-- Creating all tables 
-- -------------------------------------------------- 

CREATE TABLE [defaultSchema].[YourTable] (...); 

Там также вопрос открыт на CodePlex, что, кажется, подтверждает этот вывод: http://entityframework.codeplex.com/workitem/268

Там может быть способ сделать поддержка нескольких схем путем изменения шаблона T4, который генерирует DDL, но я не исследовал это. Файл по умолчанию «SSDLToSQL10.tt» найден (на моей машине) в C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ DBGen.

(Проверено на VS2012 Premium, с EF 6.1.1.)

Смежные вопросы