这应该可以帮助您入门,但是您需要使用调试器并专门进行测试才能获得所需的东西...
一个示例代码...
using (var db = new MyContext())
{
var objectContext = ((IObjectContextAdapter)db).ObjectContext;
var baseset = objectContext
.MetadataWorkspace
.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace)
.BaseEntitySets
.First(meta => meta.ElementType.Name == "YourEntityClassName");
var elementType = objectContext
.MetadataWorkspace
.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace)
.BaseEntitySets
.First(meta => meta.ElementType.Name == "YourEntityClassName")
.ElementType;
EdmMember member = elementType.Members[2];
Facet item;
// if (member.TypeUsage.Facets.TryGetValue(EdmProviderManifest.StoreGeneratedPatternFacetName, false, out item))
if (member.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out item))
{
var value = ((StoreGeneratedPattern)item.Value) == StoreGeneratedPattern.Computed;
}
但这只是故事的一部分。
我意识到这在某些情况下是有效的(因此您需要进行一些实验),具体取决于您的需要。但你也other spaces
有 - 例如SSpace
. 因此,例如对于表名,这效果更好......
var ssSpaceSet = objectContext.MetadataWorkspace.GetItems<EntityContainer>(DataSpace.SSpace).First()
.BaseEntitySets
.First(meta => meta.ElementType.Name == "YourTableName");
...然后是私有Table
财产。
在您的情况下,您应该在那里提供大多数信息 - 但例如上面生成的商店没有在那里填充 - 但我猜在其他一些“空间”中(更多在其中一个链接中)。
并查看以下链接:
获取模型架构以使用不支持 CreateDatabase 的提供程序以编程方式创建数据库
如何以编程方式读取 EF DbContext 元数据?
如何通过单元测试检查属性标记为在 ORM 模型中计算?