【问题标题】:How to get Schema name from Entity Framework 4.0 objects?如何从 Entity Framework 4.0 对象中获取架构名称?
【发布时间】:2014-02-19 06:24:35
【问题描述】:

我正在使用 C#、Entity Framework 4 和 DB2 创建一些手动 SQL 更新,就像这个天真的示例一样......

var UpdateCommand = "UPDATE MY_SCHEMA." + this.Entities.PRODUCT.EntitySet.Name +
                    " SET STOCK=0";
var AffectedRows = this.Entities.ExeceuteStoreCommand(UpdateCommand);

我想将模式指定为实体名称(稍后,如果在可重用库方法中实现,可以作为参数传递)。所以,我尝试了...

var Container = this.Entities.MetadataWorkspace.GetEntityContainer(this.Entities.DefaultContainerName, System.Data.Metadata.Edm.DataSpace.CSpace);
var Set = Container.GetEntitySetByName(this.Entities.PRODUCT.EntitySet.Name, true);
var SchemaName = Set.MetadataProperties["Schema"].Value;

问题是返回的 SchemaName 总是为空!

我见过基于解析实体框架生成的 SQL 的解决方案,但这可能会被愚弄(文本可以包含任何内容),或者特定于 SQL-Server。我们的想法是像 EF 一样与 DB 无关。

问题是...如何从 EF 对象中获取实体模式名称,而不是解析生成的 SQL 并且与 db 无关?

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    您可以从 SSpace 获得它。

    在 ef5 以下作品中。可能也可以在 ef4 中工作

    // for code-first
    var Container = this.Entities.MetadataWorkspace.GetEntityContainer("CodeFirstDatabase", DataSpace.SSpace);
    // db-first
    var Container = this.Entities.MetadataWorkspace.GetEntityContainer("DbFirstModelStoreContainer", DataSpace.SSpace);
    
    var schemaName = Container.GetEntitySetByName(this.Entities.PRODUCT.EntitySet.Name, true).Schema
    // or
    var set = Container.GetEntitySetByName(this.Entities.PRODUCT.EntitySet.Name, true);
    var schemaName = Set.MetadataProperties["Schema"].Value;
    

    【讨论】:

    • 我相信首先是数据库(EF 实体来自从现有数据库生成/更新的 .edmx 文件)。注意:仅填充 CSpace 数据空间。
    • 您使用的实体框架的确切版本号是多少?
    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    相关资源
    最近更新 更多