我需要使用EF获取数据库中的所有表。我需要他们一个一个地一桌一桌地从每个桌子上提取一些信息。任何想法如何?如何从DbContext获取所有DbSet
2
A
回答
6
这是我在EntityFramework Plus库中使用的扩展方法。
using (var ctx = new TestContext())
{
var dbSetProperties = ctx.GetDbSetProperties();
List<object> dbSets = dbSetProperties.Select(x => x.GetValue(ctx, null)).ToList();
}
public static class Extensions
{
public static List<PropertyInfo> GetDbSetProperties(this DbContext context)
{
var dbSetProperties = new List<PropertyInfo>();
var properties = context.GetType().GetProperties();
foreach (var property in properties)
{
var setType = property.PropertyType;
#if EF5 || EF6
var isDbSet = setType.IsGenericType && (typeof (IDbSet<>).IsAssignableFrom(setType.GetGenericTypeDefinition()) || setType.GetInterface(typeof (IDbSet<>).FullName) != null);
#elif EF7
var isDbSet = setType.IsGenericType && (typeof (DbSet<>).IsAssignableFrom(setType.GetGenericTypeDefinition()));
#endif
if (isDbSet)
{
dbSetProperties.Add(property);
}
}
return dbSetProperties;
}
}
编辑 您需要从DbSet元素类型使用反射和遍历所有属性。这不适用于TPC,TPT和TPH
要获得更简单的解决方案,请使用Entity Framework Extensions中的方法GetModel。这是这个库的一个免费功能。
项目:Entity Framework Extensions
文档:GetModel
免责声明:我的项目实体框架扩展的所有者
+0
以及我如何遍历每个表或DbSet的属性? – Richard
0
EntityContainer container = ObjectContext.MetadataWorkspace.GetEntityContainer(ObjectContext.DefaultContainerName, DataSpace.CSpace);
List<string> result = (from meta in container.BaseEntitySets
where meta.BuiltInTypeKind == BuiltInTypeKind.EntitySet
select meta.ElementType.ToString()).ToList<string>();
-1
你可以使用这样的事情得到一个列表的表格,然后循环浏览并获取所需的信息:
var db = new myContext().GetAllTableProperties().ToList();
+1
GetAllTableProperties()。ToList();没有出现 – Richard
相关问题
- 1. 从DbSet获取DbContext
- 2. 在Dapper DbContext,DbSet等
- 3. 从dbSet获取主键列
- 4. 在DBContext上遍历所有的DBSet(的TEntity)
- 5. 带动态DbSet的DbContext
- 6. 如何从dbcontext获取当前事务
- 7. 从dbSet在foreach中获取值
- 8. EF6:从派生DbSet获取数据
- 9. 如何从CouchDB获取所有设计?
- 10. 如何从cloudkit获取所有记录
- 11. 如何从Openfire获取所有用户?
- 12. 如何从CookieManager android获取所有cookie?
- 13. 如何从mongodb获取所有文档?
- 14. 如何从RavenDB获取所有文档?
- 15. 如何从表中获取所有行
- 16. 如何从XSD获取所有xpath?
- 17. 如何从Disqus获取所有评论?
- 18. 如何从IHTMLDocument2获取所有mshtml.IHTMLDivElement?
- 19. 如何从UITableView获取所有UITableViewCell?
- 20. 如何从JSTREE获取所有ID
- 21. 将DbSet动态加载到DbContext
- 22. 为什么我的DbContext DbSet为null?
- 23. 上dbset动态查询中的DbContext类
- 24. 应用LINQ到一个DbSet内的DbContext
- 25. 数据中的DbContext DbSet比数据库
- 26. 如何从C#Web API DbSet中获取实际对象?
- 27. 探索所有DbContext
- 28. EFCore - 获取特定DbSet
- 29. 如何统计在DbContext中添加的DbSet行
- 30. 我如何选择的DbContext正确DbSet基于表名
您需要获取所有DbSet或所有表吗?你的问题与标题不清楚。 –
DbSet与表格相同。 – Richard
你为什么需要这样做?如果使用EF,根据数据库的大小,可能需要很长时间才能执行。 – mikeyq6