我见过在至少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;
}
}
答案 0 :(得分:0)
Pawel的问题让我检查了edmx并找到答案。我在我的问题中说我可以查看模型(UI),看看有问题的列是一个标识列。事实上,事实并非如此。在任何情况下,我都希望StoreGeneratedPattern属性存在,因为枚举包含所有可能的值(Identity,Computed,None)。
我的实际目标是检测主键列/属性不是标识的所有实体。
我通过后续测试发现,StoreGeneratedPattern属性仅用于身份和计算;如果列不是存储生成的,则它不存在(从不引用StoreGeneratedPattern.None)。因此,上面的示例代码很好,只要它被修改以处理属性的缺失(这对我来说似乎很奇怪)。