我有下一个背景:
public class MyContext : DbContext
{
public virtual DbSet<Customer> Customers { get; set; }
public virtual DbSet<Provider> Providers { get; set; }
public virtual DbSet<Product> Products { get; set; }
}
是否存在获取我的上下文的所有实体的任何方法?
像MyContext.GetAllEntities()
那样返回{Customer, Provider, Product}
。
修改
我想检索OnModelCreating
中的实体,以便在使用自定义属性修饰的已确定属性中创建索引。
在OnModelCreating
我无法访问上下文中的question
谢谢!
答案 0 :(得分:0)
在代码中,您可以在所有DbSet上调用ToList()。否则,您必须编写一个存储过程来执行UNION
并只调用sp。
public List<object> GetAllEntities(MyContext db)
{
var results = new List<object>();
results.AddRange(db.Customers.ToList());
results.AddRange(db.Providers.ToList());
results.AddRange(db.Products.ToList());
return results;
}
修改强> 无名列表很好,然后使用反射。
MyContext db = new MyContext();
var resultsList = new List<object>();
PropertyInfo[] info = db.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach(PropertyInfo item in info)
{
//Check for array, that it is a DbSet etc...
var setType = item.PropertyType.GetTypeInfo().GenericTypeArguments[0];
resultsList.AddRange(db.Set(setType).ToListAsync().Result);
}
return resultsList;
答案 1 :(得分:0)
根据Wurd的回复:
private IEnumerable<Type> GetAllEntities ()
{
var entities = new List<Type> ();
PropertyInfo[] info = GetType ().GetProperties (BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo item in info) {
var setType = item.PropertyType.GetTypeInfo ().GenericTypeArguments[0];
entities.Add (setType);
}
return entities;
}