我需要使用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