实体框架,ASP.NET,上下文缺失

时间:2019-03-12 18:45:42

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

我是这里的新手(仍然是菜鸟编码),对不起,如果我问错或愚蠢... 我试图通过Troelsen的书Pro C#7以及.NET和.NET Core进行学习,但是我坚持在第29章的开头。 主要目标是创建一个ASP.NET MVC(名为CarLotMVC)解决方案。正如书中所述,我已经创建了ASP项目,然后尝试插入其他两个项目(AutoLotDAL和AutoLotDAL.Models)。 我的工作和书中写的完全一样,但是当我尝试向ASP项目中添加新的Controller时,看不到上下文,只能看到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);
    }
}

这是connectionString:

<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

1 个答案:

答案 0 :(得分: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标记与在其中指定的值进行比较,确认项目guid与您的AutoLotDAL和AutoLotDAL.Models项目中的guid相匹配。从书本解决方案中复制的元素。

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

<ProjectGuid>{7E5A8812-C303-4AE0-A6E7-4AC96EC11624}</ProjectGuid>

使用相同的文件转到项目的目录,然后在文本编辑器中将其打开。找到以下块(文件中的第185行):

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

并从解决方案的文件中粘贴元素。

现在,在相同文件(文件中的第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>

并注释掉或删除这些行。

保存文件,然后尝试再次添加控制器。该项目为我带来了这些变化。

相关问题