实体框架-从实体中获取表名我正在使用EntityFramework4.1和CodeFirst方法。我能够获取实体的存储模型类型和列名:varitems=context.ObjectContext.MetadataWorkspace.GetItems(DataSpace.SSpace);foreach(variinitems){Console.WriteLine("表名:{0}",i.Name);Console.WriteLine("按键:");foreach(varkeyini.KeyMembers)Console.WriteLine("t{0}({1})",key.Name,key.TypeUsage.EdmType.FullName);Console.WriteLine("成员:");foreach(varmemberini.Members)Console.WriteLine("t{0}({1})",member.Name,member.TypeUsage.EdmType.FullName);我需要的是获取实体映射到的真实表名。有不同的方式来指定(通过使用Fluent-API.ToTable()、DataAnnotation[TableAttribute])。有没有通用的方法来获取这些信息?我发现获取表名的最简单方法如下:vartables=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(varitemintables){EntityTypeitemType=(EntityType)item;StringTableName=itemType.Name;请注意,如果您复制上下文,则需要撤消它。EF6.1,代码优先:publicstaticstringGetTableName(thisDbContextcontext)whereT:class{ObjectContextobjectContext=((IObjectContextAdapter)context).ObjectContext;返回objectContext.GetTableName(typeof(T));}publicstaticstringGetTableName(thisDbContextcontext,Typet){ObjectContextobjectContext=((IObjectContextAdapter)context).ObjectContext;返回objectContext.GetTableName(t);}privatestaticreadonlyDictionaryTableNames=newDictionary();publicstaticstringGetTableName(thisObjectContextcontext,Typet){stringresult;if(!TableNames.TryGetValue(t,outresult)){lock(TableNames){if(!TableNames.TryGetValue(t,outresult)){stringentityName=t.Name;ReadOnlyCollectionstorageMetadata=context.MetadataWorkspace.GetItems(DataSpace.CSSSpace);foreach(存储元数据中的EntityContainerMappingecm){EntitySet实体集;如果(ecm.StoreEntityContainer.TryGetEntitySetByName(entityName,true,outentitySet)){result=entitySet.Schema+"."+entitySet.Table;//TODO:括号中断;}}TableNames.Add(t,result);}}}返回结果;}也可以通过其他方式获取EDM表名,如前所述,就是C#学习教程:实体框架-从实体中获取表名,分享全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicstaticstringGetTableName(thisObjectContextcontext)whereT:EntityObject{varentities=context.MetadataWorkspace.GetItems(System.Data.Metadata.Edm.DataSpace.CSpace).Where(b=>b.BuiltInTypeKind==BuiltInTypeKind.EntityType);foreach(System.Data.Metadata.Edm.EntityTypeiteminentities){if(item.FullName==typeof(T).FullName)returnitem.Name;}返回String.Empty;}本文收集自网络,不代表立场。如涉及侵权请点击维权联系管理员删除转载请注明出处:
