如何解决实体框架-从实体获取表名[重复]
|| 这个问题已经在这里有了答案:解决方法
我发现获取表名称的最简单方法是:
var tables = Context.MetadataWorkspace.GetItems(System.Data.Metadata.Edm.DataSpace.CSpace)
.Where(x => (x.MetadataProperties.Contains(\"NamespaceName\") ? String.Compare(x.MetadataProperties[\"NamespaceName\"].Value.ToString(),\"Model\",true) == 0 : false)
&& !x.MetadataProperties.Contains(\"IsForeignKey\")
&& x.MetadataProperties.Contains(\"KeyMembers\"));
这将使您获得表实体。
然后,您可以执行以下操作以提取名称:
foreach (var item in tables)
{
EntityType itemType = (EntityType)item;
String TableName = itemType.Name;
}
注意,如果您将上下文复数化,则需要撤消该操作。
,EF 6.1,代码优先:
public static string GetTableName<T>(this DbContext context) where T : class
{
ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
return objectContext.GetTableName(typeof(T));
}
public static string GetTableName(this DbContext context,Type t)
{
ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
return objectContext.GetTableName(t);
}
private static readonly Dictionary<Type,string> TableNames = new Dictionary<Type,string>();
public static string GetTableName(this ObjectContext context,Type t)
{
string result;
if (!TableNames.TryGetValue(t,out result))
{
lock (TableNames)
{
if (!TableNames.TryGetValue(t,out result))
{
string entityName = t.Name;
ReadOnlyCollection<EntityContainerMapping> storageMetadata = context.MetadataWorkspace.GetItems<EntityContainerMapping>(DataSpace.CSSpace);
foreach (EntityContainerMapping ecm in storageMetadata)
{
EntitySet entitySet;
if (ecm.StoreEntityContainer.TryGetEntitySetByName(entityName,true,out entitySet))
{
result = entitySet.Schema + \".\" + entitySet.Table;//TODO: brackets
break;
}
}
TableNames.Add(t,result);
}
}
}
return result;
}
,还有另一种获取EDM表名称的方法
public static string GetTableName<T>(this ObjectContext context) where T : EntityObject
{
var entities= context.MetadataWorkspace.GetItems(System.Data.Metadata.Edm.DataSpace.CSpace).Where(b => b.BuiltInTypeKind == BuiltInTypeKind.EntityType);
foreach (System.Data.Metadata.Edm.EntityType item in entities)
{
if(item.FullName==typeof(T).FullName)
return item.Name;
}
return String.Empty;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。