Gibt es eine Möglichkeit, POCO-Typen von der angegebenen DbContext-Instanz abzurufen?EF CodeFirst: Alle POCO-Typen für DbContext abrufen
Antwort
Sie benötigen für den Zugriff auf die 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);
}
}
Tnx, aber ich brauche Zugriff auf POCO-Klasse Typ, Eigenschaften und Eigenschaften Attribute - EntityType-Instanzen gibt eigene Implementierung in Eigenschaften, PropertiesMetadata und etc. – DrAlligieri
@DrAlligieri Sie können den vollständigen Namen des Typs und erhalten Verwenden Sie dann Reflexionen, um auf Eigenschaften und Attribute zuzugreifen. – Eranga
FullName gibt "CodeFirstDatabaseSchema.TypeNameThere" zurück, CodeFirstDatabaseSchema - ist falscher Namespace für die POCO-Klasse – DrAlligieri
@Lei Yang: Sie diese verwenden können alle Arten in eine Liste zu erhalten.
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));
}
Leider konnte ich die akzeptierten Antworten nicht bearbeiten - Sie müssen nur den Datenraum verwendet ändern, wie
var items = mdw.GetItems<EntityType>(DataSpace.OSpace);
folgt Ihre POCO Klassen zu erhalten, anstatt die EF-Proxies.
mit dem gleichen Problem, haben Sie gelöst? Ich brauche Hilfe .. =/ –