Biorąc pod uwagę następujący uproszczony kontekst 6 kontekstu jednostki, próbuję wypełnić listę podmiotami, ale mając problemy z odbiciem (jak sądzę) poprzez refleksję.Jak rzucić DbSet <T> na listę <T>
public class FooContext : DbContext
{
public virtual IDbSet<FooClass> Foo { get; set; }
//...
}
public class FooClass
{
public int Id{ get; set; }
public string Name {get; set; }
//...
}
public main()
{
using (var context = new FooContext())
{
var sets = typeof(FooContext).GetProperties().Where(pi => pi.PropertyType.IsInterface && pi.PropertyType.GetGenericTypeDefinition().ToString().ToLower().Contains("idbset"));
foreach (var set in sets)
{
//When I debug and enumerate over 'value' the entire results are shown so I believe the reflection part is OK.
var value = set.GetValue(context, null);
//Always returns null. How can I cast DbSet<T> to List<object> or List<T>?
var list = value as List<object>();
//...
}
}
}
Robię to dla metody użyteczności dla niektórych testów integracyjnych, które robię. Próbuję to zrobić bez korzystania z bezpośrednich wywołań SQL inline (przy użyciu SqlConnection i SqlCommand itp.), Aby uzyskać dostęp do bazy danych (jak datastore może zmienić na Oracle itp.).
Możesz rzutować na interfejs "IEnumerable" –
'set.GetValue (context, null)' zwraca 'object'. Próbujesz przesłać go do' List
'DbSet <>' nie jest listą *, a ani 'DbSet' ani 'List ' nie jest listą 'List