【问题标题】:Multiple database schemas in EF model firstEF 模型中的多个数据库模式优先
【发布时间】:2014-08-30 18:17:31
【问题描述】:

我想使用模型优先的方法来使用实体框架创建数据库。我还想使用多个数据库模式。是否有可能与默认的“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" />
...

【问题讨论】:

  • 不是试图拖钓,但 EDMX 和 EF 是一团糟。如果可以,请离开。

标签: c# sql entity-framework edmx ef-model-first


【解决方案1】:

据我所知,在模型优先中使用单个 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 上测试。)

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2011-04-17
    • 2013-07-27
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2018-02-26
    相关资源
    最近更新 更多