EF模型中的多个数据库模式优先

本文关键字:数据库 模式 模型 EF | 更新日期: 2023-09-27 18:20:14

我想使用模型优先的方法来使用实体框架创建数据库。我还想使用多个数据库模式。是否有可能创建额外的数据库模式(比如"安全性")以及默认的"dbo"?

我还想知道为什么在执行"从模型生成数据库"命令后,.edmx文件的SSDL部分中的EntitySets Schema属性会重置回"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" />
...

EF模型中的多个数据库模式优先

据我所知,在模型中首先使用单个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

可能有一种方法可以通过修改生成DDL的T4模板来实现多模式支持,但我还没有对此进行研究。默认文件是"SSDLToSQL10.tt"(在我的计算机上),位于C:''Program Files(x86)''Microsoft Visual Studio 11.0''Common7''IDE''Extensions''Microsoft''Entity Framework Tools''DBGen。

(在带有EF 6.1.1的VS2012 Premium上进行了测试。)