Belirtilen DbContext örneğinden POCO türlerini almanın bir yolu var mı?EF CodeFirst: DbContext için tüm POCO türlerini alın
cevap
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, ancak POCO sınıfına, tip ve özellik özelliklerine erişmem gerekiyor - EntityType örnekleri, Properties, PropertiesMetadata ve etc içinde kendi uygulamanızı döndürür. – DrAlligieri
@DrAlligieri Yazının tam adını alabilir ve daha sonra özellik ve niteliklere erişmek için yansımaları kullanın. – Eranga
FullName "CodeFirstDatabaseSchema.TypeNameThere" değerini döndürür, CodeFirstDatabaseSchema - POCO sınıfı – DrAlligieri
@Lei Yang erişmek gerekir: Eğer bir liste halinde her türlü almak için bunu kullanabilir.
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));
}
Ne yazık ki, kabul cevapları düzenleyemiyordu - Az önce POCO sınıfları yerine EF vekiller almak için
var items = mdw.GetItems<EntityType>(DataSpace.OSpace);
aşağıdaki gibi kullanılan DATASPACE değiştirmeniz gerekir.
aynı sorunu yaşıyor, çözdünüz mü? Yardıma ihtiyacım var .. =/ –