【问题标题】:Why LinqPad return The name 'ModelName' does not exist in the current context error?为什么 LinqPad 返回 The name 'ModelName' does not exist in the current context 错误?
【发布时间】:2017-05-04 18:35:37
【问题描述】:

我有一个 Asp.net MVC - C# 项目,想在项目中使用之前使用 LINQPad 测试它的一些 Entity Framework 语句。

项目有不同的类库如

  • DAL(包括ApplicationDbContext 类)
  • 域类(模型)

A) 我在 LINQPad 中的 DAL 中添加了一个 EF 连接,它加载了所有实体在其窗口的左侧树中成功。 [见下图]

B) 此外,我将 LINQPad 查询 中的一些必需引用添加到以下 DLL:

  • DAL dll
  • 域类 dll
  • Microsoft.AspNet.Identity.Core.dll
  • EntityFramework.dll

但是 »

当我右键单击左侧树中的实体并选择每个选项时,它会显示此错误:

当前上下文中不存在名称“[Conceptual_Model_Name]”

为什么? 我该如何解决这个问题?


编辑 1:

ApplicationDbContext 类的OnModelCreating 方法中,我调用以下方法DbContext 动态添加实体

    public void LoadEntities(Assembly asm, DbModelBuilder modelBuilder, string nameSpace)
    {
        var entityTypes = asm.GetTypes()
            .Where(type => type.BaseType != null &&
                           type.Namespace == nameSpace &&
                           type.BaseType == null)
            .ToList();

        var entityMethod = typeof(DbModelBuilder).GetMethod("Entity");
        entityTypes.ForEach(type => entityMethod.MakeGenericMethod(type).Invoke(modelBuilder, new object[] { }));
    }

我用这行代码调用它:

LoadEntities(typeof(AppUser).GetTypeInfo().Assembly, modelBuilder, "DomainClasses.Entities");

这可能与模型的动态加载有关吗?

【问题讨论】:

  • 开始你可以切换到LinqPad的最新版本(5)
  • @Steve,好的,我也尝试了 v5,但我在问题中附加了一些新信息(关于动态加载 DBContext 类中的实体)。你有什么想法吗?
  • @Steve,我使用最新版本 (5) 对其进行了测试。结果没有改变。
  • 抱歉,不知道这种行为

标签: c# asp.net-mvc entity-framework linqpad


【解决方案1】:

我自己解决了!

我在问题中写的关于它的怀疑是正确的。正如我在问题中所写,我将实体添加到 DbContextdynamically 但现在我将其更改为 static 方式,如下所示:

// Add this property to the ApplicationDbContext class

public virtual DbSet<Consumption> Consumptions { get; set; }

现在当我在LINQPad 中使用Consumptions 属性时,它可以工作...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2022-12-27
    相关资源
    最近更新 更多