Esiste un modo per ottenere i tipi di POCO dall'istanza DbContext specificata?Codice EF Prima: Ottieni tutti i tipi POCO per DbContext
risposta
è necessario accedere al 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, ma ho bisogno di accedere alla classe POCO Tipo, proprietà e proprietà attributi - Istanze EntityType restituisce la propria implementazione in Proprietà, ProprietàMetadata ed ecc. – DrAlligieri
@DrAlligieri È possibile ottenere il nome completo del tipo e quindi utilizzare le riflessioni per accedere a proprietà e attributi. – Eranga
FullName restituisce "CodeFirstDatabaseSchema.TypeNameThere", CodeFirstDatabaseSchema - è uno spazio dei nomi errato per la classe POCO – DrAlligieri
@Lei Yang: è possibile utilizzare questo per ottenere tutti i tipi in un elenco.
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));
}
Purtroppo, non ho potuto modificare le risposte accettate - solo bisogno di cambiare lo spazio dati utilizzato come segue
var items = mdw.GetItems<EntityType>(DataSpace.OSpace);
per ottenere le vostre classi POCO invece delle deleghe EF.
avendo lo stesso problema, hai risolto? Ho bisogno di aiuto .. =/ –