EF5:无法从模型中获取StoreGeneratedPattern属性

时间:2013-08-08 03:07:32

标签: entity-framework entity-framework-5

我见过在至少2个地方(here& here)阅读实体框架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;
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

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