我想获得我在Edmx中设置的KeyMembers
StoreGeneratedPattern
到Identity
有没有办法做到这一点?
我可以使用以下代码获取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自动递增值。
答案 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));
}
(其中oc
是ObjectContext
)