为了账号安全,请及时绑定邮箱和手机立即绑定

EF CodeFirst-获取所有实体

EF CodeFirst-获取所有实体

C#
慕斯王 2021-05-15 18:19:29
我有下一个上下文: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}。
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

在代码中,您可以在所有DbSet上调用ToList()。否则,您将不得不编写一个执行a的存储过程,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;


查看完整回答
反对 回复 2021-05-23
?
慕的地10843

TA贡献1785条经验 获得超8个赞

根据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;

}


查看完整回答
反对 回复 2021-05-23
  • 2 回答
  • 0 关注
  • 243 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信