为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
UYOU 2022-10-23 13:39:16
我是新来的(并且仍然是新手编码),很抱歉,如果我问错或愚蠢......我正在尝试使用 Troelsen 的书 Pro C# 7 with .NET and .NET Core,但我坚持第 29 章开始。主要目标是创建一个 ASP.NET MVC(名为 CarLotMVC)解决方案。正如书中所说,我创建了 ASP 项目,然后我尝试插入另外两个项目(AutoLotDAL 和 AutoLotDAL.Models)。我做的和书中写的完全一样,但是当我尝试向 ASP 项目添加一个新的控制器时,我看不到上下文,只能看到 ASP 项目的模型类。我下载了源代码,将 AutoLotDAL 和 AutoLotDAL.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);    }}
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

通过将 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>

并注释掉或删除这些行。


保存文件并再次尝试添加控制器。该项目通过这些更改为我工作。


查看完整回答
反对 回复 2022-10-23
?
慕后森

TA贡献1802条经验 获得超5个赞

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

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


查看完整回答
反对 回复 2022-10-23
  • 2 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号