C#使用EF生成的对象名作为String来获取EntityType

时间:2014-01-22 21:42:59

标签: c# entity-framework

我试图通过使用EF类的名称动态获取表的条目。

例如,我有一个名为Tents的表,我想访问此对象中的记录。下面是我正在使用的代码,但是factory.DB.CreateObjectSet()不允许您使用System.Type但需要EntityType。

我尝试过将System.Type类型转换为EntityType,但事实并非如此。我也尝试在EntityType中寻找帮助的功能,但似乎没有。如果我用DataAccess.Tent替换dbType,我的代码可以正常工作,因此代码本身没有问题。我只需要弄清楚如何从EF对象的类名中获取EntityType。我可以通过创建一个基于名称返回实体类型的函数(使用开关或if)来实现它,但是每次添加新类时我都需要添加一个新条目。有没有办法用反射做到这一点? (我知道我对GetType的字符串进行了硬编码,但这仅适用于此示例。我通过根据调用的函数微调X或Y来动态获取EF类型的名称。)

public class RecordListHelper<X, Y> 
{
    public List<X> GetRecord(int recordId)
    {
        RecordFactory factory = new RecordFactory();
        List<X> list = new List<X>();

        Type dbType = Type.GetType("DataAccess.Tent");

        using (factory.DB)
        {
            var dbItems = (
                from tent in factory.DB.CreateObjectSet<dbType>()
                let seedlotid = (from r in factory.DB.Reports
                                 where r.Id == recordId
                                 select r.seedLotId).FirstOrDefault()

                where tent.SeedLotId == seedlotid
                select tent).ToList();

            foreach (var dbItem in dbItems)
            {
                X listItem = (X)Activator.CreateInstance(typeof(X), new object[] { 
                    dbItem,
                    recordId
                });

                list.Add(listItem);
            } 
        }
        return list;
    }
}

谢谢, DMAN

0 个答案:

没有答案