0

我已经在至少 2 个地方(此处此处)看到了用于读取实体框架 EdmProperty 的 StoreGeneratedPattern 属性(已计算、身份或无)的示例代码,但它不适用于我的模型。我的上下文是一个ObjectContext,版本是EF5;也许这段代码与 EF5 冲突?当我查看模型中此属性/列的属性时,它显示了身份。

这是我的代码:

using ( var context = new MyApplicationEntities() )
{
    var entityType = ( (EntityConnection)context.Connection )
        .GetMetadataWorkspace() // can't call context.MetadataWorkspace - storage model will not be present
        .GetType( "MyEntityTypeWithIdentityColumn", "MyApplicationModel.Store", DataSpace.SSpace ) as EntityType;

    EdmMember identityColumn = entityType.Members["MyIdentityColumn"];

    Facet item;
    // All I get here for Facets is Nullable & DefaultValue
    if ( identityColumn.TypeUsage.Facets.TryGetValue( "StoreGeneratedPattern", false, out item ) )
    {
        var value = ( (StoreGeneratedPattern)item.Value ) == StoreGeneratedPattern.Identity;
    }
}
4

1 回答 1

0

Pawel 的问题让我检查了 edmx 并找到了答案。我在我的问题中说,我可以查看模型(UI)并看到有问题的列是一个标识列。事实上,事实并非如此。在任何情况下,我都希望 StoreGeneratedPattern 属性存在,因为枚举包含所有可能的值(Identity、Computed、None)。

我的实际目标是检测所有主键列/属性不是身份的实体。

我通过后续测试发现 StoreGeneratedPattern 属性只存在于身份和计算;如果该列不是存储生成的,则它不存在(StoreGeneratedPattern.None 永远不会被引用)。因此,只要修改上面的示例代码以处理该属性的缺失(这对我来说似乎很奇怪),它就可以了。

于 2013-08-08T20:23:22.297 回答