EF CodeFirst: Get All POCO Types for DbContext

Is there a way to get POCO types from a specified DbContext instance?

+6
source share
3 answers

You need to access MetadataWorkspace

public class MyContext : DbContext { public void Test() { var objectContext = ((IObjectContextAdapter)this).ObjectContext; var mdw = objectContext.MetadataWorkspace; var items = mdw.GetItems<EntityType>(DataSpace.CSpace); foreach (var i in items) { Console.WriteLine("Class Name: {0}", i.Name); } } 
+6
source

@Lei Yang: you can use this to get all types to a list.

 var objectContext = ((IObjectContextAdapter) dbContext).ObjectContext; var mdw = objectContext.MetadataWorkspace; var items = mdw.GetItems<EntityType>(DataSpace.CSpace); var dbContextAssembly = dbContext.GetType().Assembly; var entityTypes = new List<Type>(); foreach (var i in items) { entityTypes.Add(dbContextAssembly.GetType(i.FullName)); } 
+4
source

Unfortunately, I could not edit the accepted answers - you just need to change the dataspace value as follows

 var items = mdw.GetItems<EntityType>(DataSpace.OSpace); 

to get your POCO classes instead of EF proxies.

+3
source

Source: https://habr.com/ru/post/926052/


All Articles