我想使用模型第一种方法来创建具有Entity Framework的数据库。我还想使用多个数据库模式。是否有可能创建其他数据库模式(例如" security")以及默认" 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" />
...
答案 0 :(得分: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
可能有一种方法可以通过修改生成DDL的T4模板来完成多模式支持,但我还没有研究过这个。在C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ DBGen中找到(在我的机器上)的默认文件“SSDLToSQL10.tt”。
(使用EF 6.1.1在VS2012 Premium上测试。)