如何使用反射从dbContext获取DbSet <someclass>(EF)?

时间:2017-05-09 21:24:08

标签: c# entity-framework linq reflection

让我说我有

DBContext principal = new DBContext();
var x = principal.GetType().GetProperty("SomeClass").GetType();

我现在拥有DbSet的PropertyInfo&lt; SomeClass&gt;

我现在要做的是以某种方式迭代(例如转换为列表)并从表中的每一行获取值。

想象一下我能做到这一点:

x[0] // would be the 0th entery in DbSet<SomeClass>, the first row aka of type SomeClass

从这里我会知道如何进一步深入挖掘和访问属性(使用与上面相同的原理)

1 个答案:

答案 0 :(得分:4)

DbSet同时实现IEnumerableIEnumerable<T>,,如:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace efAW
{
    class Program
    {

        static IEnumerable GetAllMembers(DbContext db, string dbSetName)
        {
            var pi = db.GetType().GetProperty(dbSetName);
            return (IEnumerable)pi.GetValue(db);
        }
        static void Main(string[] args)
        {
            using (var db = new aw())
            {
                var customers = GetAllMembers(db, "Customers").OfType<Customer>().ToList();
            }
        }
    }
}

大卫