Czy istnieje sposób na pobranie typów POCO z określonej instancji DbContext?Kod EF Najpierw należy pobrać wszystkie typy POCO dla DbContext
Odpowiedz
Trzeba otworzyć 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, ale potrzebuję dostępu do klasy POCO Atrybuty typu, właściwości i właściwości - Instancje EntityType zwracają własną implementację we właściwościach, właściwościach metadanych itd. – DrAlligieri
@DrAlligieri Możesz uzyskać pełną nazwę typu i następnie użyj refleksów, aby uzyskać dostęp do właściwości i atrybutów. – Eranga
FullName zwraca "CodeFirstDatabaseSchema.TypeNameThere", CodeFirstDatabaseSchema - jest niepoprawną przestrzenią nazw dla klasy POCO – DrAlligieri
@Lei Yang: można to wykorzystać, aby uzyskać wszystkie typy do listy.
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));
}
Niestety, nie mogę edytować zaakceptowane odpowiedź - wystarczy zmienić dataspace używany następująco
var items = mdw.GetItems<EntityType>(DataSpace.OSpace);
aby uzyskać klas POCO zamiast serwerów proxy EF.
o tym samym problemie, rozwiązałeś? Potrzebuję pomocy .. =/ –