【问题标题】:Entity Framework, ASP.NET, Missing context实体框架,ASP.NET,缺少上下文
【发布时间】:2019-03-12 18:45:42
【问题描述】:

我是新来的(而且还是新手编码),很抱歉,如果我问错或愚蠢...... 我正在尝试阅读 Troelsen 的书 Pro C# 7 with .NET and .NET Core,但我停留在第 29 章的开头。 主要目标是创建一个 ASP.NET MVC(名为 CarLotMVC)解决方案。正如书中所说,我创建了 ASP 项目,然后我尝试插入另外两个项目(AutoLotDAL 和 AutoLotDAL.Models)。 我做的和书中写的完全一样,但是当我尝试向 ASP 项目添加一个新的控制器时,我看不到上下文,只能看到 ASP 项目的模型类。 我下载了源代码,将 AutoLotDAL 和 AutoLotDAL.Models 项目添加到解决方案中,修改了连接字符串、命名空间,但仍然看不到上下文或模型类。

Scaffolds menu - missing models

可能出了什么问题?在 AutoLotDAL 项目中有迁移类,我试图删除数据库并再次创建,但这并没有帮助。尝试使用管理员运行 Visual Studio,清理解决方案并重新构建。我只看到过一次上下文,解决方案中有多个错误,VS 在没有我帮助的情况下创建了 Controller 类,但是当我稍后重新打开时,解决方案全部消失了。

这是上下文:

public partial class AutoLotEntities : DbContext
{
    public AutoLotEntities()
        : base("name=AutoLot")
    {
    }

    protected override void Dispose(bool disposing)
    {
    }

    private void OnSavingChanges(object sender, EventArgs eventArgs)
    {
        var context = sender as ObjectContext;
        if (context == null) return;
        foreach (ObjectStateEntry item in
            context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added))
        {
            if ((item.Entity as Inventory) != null)
            {
                var entity = (Inventory)item.Entity;
                if (entity.Color == "Red")
                {
                    item.RejectPropertyChanges(nameof(entity.Color));
                }
            }
        }

    }

    private void OnObjectMaterialized(object sender, ObjectMaterializedEventArgs e)
    {
    }

    public virtual DbSet<CreditRisk> CreditRisks { get; set; }
    public virtual DbSet<Customer> Customers { get; set; }
    public virtual DbSet<Inventory> Cars { get; set; }
    public virtual DbSet<Order> Orders { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Inventory>()
            .HasMany(e => e.Orders)
            .WithRequired(e => e.Car)
            .WillCascadeOnDelete(false);
    }
}

这是连接字符串:

<connectionStrings> <add name="AutoLot" connectionString="data source=(local)\SQLEXPRESS;initial catalog=AutoLot;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> </connectionStrings>    

我正在使用 VS Community 2017、.NET Framework 4.6.1、EF 6.2.0,更新了所有 NuGet 包。但是还是无法重现书中的解决方案……请帮忙。

参考文献列表: References branch

【问题讨论】:

  • 所以目标是在控制器内部使用您的AutoLotEntities
  • AutoLotEntities 将是上下文类,我必须创建一个控制器类 InventoryController,但我不能选择模型类,也不能选择上下文类。
  • 同样的问题。在不同的课程中读过这本书 3 遍。 3个月前的那一章没有问题,但现在它不起作用。有些东西改变了。不确定是什么。下载的代码工作正常,但单步执行说明不再有效。

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


【解决方案1】:

我通过将 CarLotMVC.csproj 文件中的一部分从本书的解决方案复制到我的项目中找到了解决此问题的方法。

首先导航到本书解决方案代码中的 ..\pro-csharp-7-master\Chapter_29\CarLotMVC\CarLotMVC 目录,然后在文本编辑器中打开 CarLotMVC.csproj 文件。

找到以下元素并将其复制到剪贴板:

  <ItemGroup>
    <ProjectReference Include="..\AutoLotDAL.Models\AutoLotDAL.Models.csproj">
      <Project>{9a917d7c-885e-4d9a-818f-9955871a4fbb}</Project>
      <Name>AutoLotDAL.Models</Name>
    </ProjectReference>
    <ProjectReference Include="..\AutoLotDAL\AutoLotDAL.csproj">
      <Project>{7e5a8812-c303-4ae0-a6e7-4ac96ec11624}</Project>
      <Name>AutoLotDAL</Name>
    </ProjectReference>
  </ItemGroup>

通过打开 AutoLotDAL 项目中的 AutoLotDAL.csproj 和 AutoLotDAL.csproj 中的 AutoLotDAL.Models.csproj 并将 ProjectGuid 标签与在从书中的解决方案中复制的元素。

以下是我的 AutoLotDAL.csproj 中的第 7 行:

&lt;ProjectGuid&gt;{7E5A8812-C303-4AE0-A6E7-4AC96EC11624}&lt;/ProjectGuid&gt;

使用相同的文件转到您的项目目录并在文本编辑器中打开它。找到以下块(我的文件中的第 185 行):

  <ItemGroup>
    <Folder Include="App_Data\" />
    <Folder Include="Models\" />
  </ItemGroup>

然后将解决方案文件中的元素粘贴到它之后。

现在,在 same 文件(我的文件中的第 49 行)中找到以下元素:

    <Reference Include="AutoLotDAL">
      <HintPath>..\AutoLotDAL\bin\Debug\AutoLotDAL.dll</HintPath>
    </Reference>
    <Reference Include="AutoLotDAL.Models">
      <HintPath>..\AutoLotDAL.Models\bin\Debug\AutoLotDAL.Models.dll</HintPath>
    </Reference>

并注释掉或删除这些行。

保存文件并再次尝试添加控制器。通过这些更改,该项目对我有用。

【讨论】:

  • @rosszfem 你能确认这对你有用吗?为我工作!
【解决方案2】:

除了将 AutoLotDAL 和 AutoLotDAL.Models 项目添加到解决方案之外,您还必须在 CarLotMVC 项目中添加对这些项目的引用。您可以找到关于该主题的文档 here

完成此操作后,您必须重新编译您的项目。如果编译没有任何错误,您应该会在脚手架对话框中看到 Context 和 Model 类。

【讨论】:

  • 我添加了引用,也添加了using语句,但仍然无法选择上下文类和模型类。
  • 您能否发布为 CarLotMVC 项目打开了引用分支的解决方案布局的屏幕截图?
  • 我在原始帖子中添加了一张新图片,其中显示了 CarLotMVC 参考。我在网上搜索了几天,我尝试了很多修复,但没有一个有帮助。当我启动解决方案的整个源代码时,它按预期工作。但是当我使用 ASP MVC 创建一个新的(自己的)解决方案,然后从源代码中复制 AutoLotDAL 和 AutoLotDAL.Models 项目时,构建项目、上下文和模型仍然从脚手架中丢失。
猜你喜欢
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多