【问题标题】:How to use DbContext when there is no DbSet<> inside that, for query?当其中没有 DbSet<> 时如何使用 DbContext 进行查询?
【发布时间】:2016-10-02 13:53:09
【问题描述】:

我正在使用 Entity Framework Code-First,这是我的 DbContext。如您所见,没有关于 DbSet 属性的任何内容,所有这些都将由 C# CodeDOM 提供的模型类提供。我正在使用 Code-First 动态创建我的 Tables

    public class MyDBContext : DbContext
{

    public MyDBContext() : base("MyCon")
    {
        Database.SetInitializer<MyDBContext>(new CreateDatabaseIfNotExists<MyDBContext>());
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        var entityMethod = typeof(DbModelBuilder).GetMethod("Entity");
        var theList = Assembly.GetExecutingAssembly().GetTypes()
                  .Where(t => t.Namespace == "FullDynamicWepApp.Data.Domins")
                  .ToList();
        foreach (var item in theList)
        {
            entityMethod.MakeGenericMethod(item)
                           .Invoke(modelBuilder, new object[] { });
        }
        base.OnModelCreating(modelBuilder);
    }

}

但现在我不知道如何在 DbContext 中没有任何 DbSet 的情况下编写 query Linq?创建我的 DbContext 的实例并使用哪个属性?

 MyDBContext Db = new MyDBContext();
        Db.What???????

在这些情况下,我该如何编写我的 CRUD 操作

【问题讨论】:

  • Charles Mager 的回答是正确的,并且是您不想转到底层 ObjectContext 或另一个 DbContext 的唯一方法。只是想提一下,您应该始终(如果可能)将您的 DbContext 包装在 using 块中,以便正确处理它们。
  • 您当然可以使用 Charles 的回答,但为什么不直接将 theDbSet 属性添加到您的 MyDBContext 类中,至少对于您打算直接查询的实体类型而言?

标签: c# entity-framework linq ef-code-first


【解决方案1】:

DbContext.Set&lt;TEntity&gt; 方法将为给定类型返回 DbSet&lt;TEntity&gt;,例如:

Db.Set<Entity>().Add(entity);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 2013-06-24
    • 2011-04-12
    • 2017-10-31
    • 2020-02-10
    • 2012-11-11
    相关资源
    最近更新 更多