从KeyMembers中获取身份字段

时间:2014-02-11 17:50:20

标签: c# entity-framework identity identity-column

我想获得我在Edmx中设置的KeyMembers StoreGeneratedPatternIdentity有没有办法做到这一点?

我可以使用以下代码获取KeyMembers:

private static IEnumerable<EdmMember> GetKeyMembers(string entityName)
{
    var objectContext = EntityModel.ObjectContext;

    var metaData = objectContext
        .MetadataWorkspace
        .GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace)
        .BaseEntitySets
        .FirstOrDefault(x => x.ElementType.Name == entityName);

    return metaData.ElementType.KeyMembers;
}

我遇到的问题是它也返回外键,但我只想让PrimaryKeys自动递增值。

2 个答案:

答案 0 :(得分:5)

从给定的 MetadataWorkspace ,我们打电话 mw ,我用这个:

var cSpaceEntities = mw.GetItems(DataSpace.CSpace).OfType<EntityType>();

foreach (var entity in cSpaceEntities) {
     var autoIds = entity.KeyMembers.Where(p => 
                        p.MetadataProperties
                            .Any(m =>    m.PropertyKind == PropertyKind.Extended 
                                  && Convert.ToString(m.Value) == "Identity")).ToArray();
            }

请测试

答案 1 :(得分:4)

商店生成的模式位于EF模型的SSDL内容中。以下是如何使用标识规范获取属性的示例:

var items = oc.MetadataWorkspace.GetItems(DataSpace.SSpace).OfType<EntityType>();
foreach (var entityType in items)
{
    var props = string.Join(",", entityType.Properties
                .Where(x => x.IsStoreGeneratedIdentity));
    Trace.WriteLine(string.Format("{0}: {1}", entityType.Name, props));
}

(其中ocObjectContext