按名称访问和查询DbContext的DbSet

时间:2016-09-28 12:58:57

标签: entity-framework dbset

如何按名称访问和查询DbContext的DbSet(传递带有实体名称或全名的字符串)

类似的东西(但这不起作用)

string myTypeName= "mycustomtype";   //or  "mynamespace1.mynamespace2.mycustomtype"  
Type myType = Type.GetType(myTypeName);
var dbset = db.Set(myType);

// i can't query dbset
//i should do something like this (but i don't know how to do it)
var result = ((IEnumerable<myType>)db.Set(myType)).toList();

1 个答案:

答案 0 :(得分:0)

@alex,

我花了很多时间在这上面。我找不到像问题中的元代码一样简单的方法。 欢迎接受以下改进。

我的需求可能与你的不一样,所以让我解释一下:

  1. 通过字符串创建类实例很容易。 SO上有很多例子。
  2. 什么不容易(我很确定)是如何创建一个类的实例,您只需添加您的上下文:
  3. OnDrawerClosed

    ......将适用于:

    ctx.SomeModels.Add(myClass);
    1. 我发现游戏中的类必须来自DbContext才能接受它,甚至用于删除()......
    2. 如果这符合您的情况,这可能会有所帮助。

      注意:
      - 我已经删除了所有的日志记录(使用NLog),这增加了很多调试,但这使得阅读更加困难 - 如果你制作一些断点并查看值和&amp;选择,你会看到一些我必须纠正的事情 - 问题分为两部分:
      1.从一个简单的版本中查找程序集的类名称 2.使用该计算机友好名称创建一个使DbContext不会抱怨的类:

      ctx.SaveChanges();