如何在C#中从var查询中获取DBSet的类型

时间:2015-09-05 17:28:23

标签: entity-framework c#-4.0

我从SQL Server中提取数据,并使用ElasticSearchCRUD nuget将其放在Elastic Search中。我只是遇到了一点麻烦。

你能帮忙得到DBSet的类型。

static void Main(string[] args)
        {
            using (var db = new Inventories())
            {
                db.Database.Connection.Open();
                var sets =
                 from p in typeof(Inventories).GetProperties()
                 select p.Name;
//This one works if I hardcode the class name.
                var query1 = from b in db.FileSlot_39065
                             select b;
//This one gets all the class names
                var query = from b in sets
                            select b;

                foreach (var item in query1)
                {//This FileID will be populated by intellisense
                    Console.WriteLine(item.FileID);
                }

                IElasticsearchMappingResolver elasticsearchMappingResolver = new ElasticsearchMappingResolver();
                using (var elasticsearchContext = new ElasticsearchContext("http://localhost:9200/", elasticsearchMappingResolver))
                {
                    foreach (var item in query)
                    {
                        if (item.ToString().StartsWith("FileSlot"))
                        {
                            Type itemType = item.GetType();
                            dynamic objType = item;
                            // Do not know how to get the FileID here **
                            elasticsearchContext.AddUpdateDocument(item, objType.FileID);
                        }
                    }

                    try
                    {
                        elasticsearchContext.SaveChanges();
                    }

                    catch (Exception ex)
                    {
                        Console.Write(ex.Message);
                    }
                }
            }

我有一个名为FileID的属性,它存在于我的所有DbSet中,与通用类型无关。 我的DbSets如下

public DbSet<FileSlot_39065> FileSlot_39065{ get; set; }
public DbSet<FileSlot_39066> FileSlot_39066{ get; set; }

我将把所有dbsets读作var set,然后拉取数据并写入Elastic Search。

现在我的问题是获取objType.FileID,我尝试转换为动态变量,但它只是不转换为其对象类型。

有没有人可以帮助我了解如何动态获取类名及其类型,这将有助于我设置正确的方法。

0 个答案:

没有答案