【问题标题】:Entity Framework Enable-Migrations实体框架启用迁移
【发布时间】:2014-04-08 14:50:05
【问题描述】:

我所有的搜索都返回到两个问题中的同一个,这不是这个项目的问题。我以前从来没有遇到过这个问题,但是这个特殊的项目很奇怪。

首先,项目名称是Site。 SiteContext 类继承 DbContext。

当我运行 Enable-Migrations 时,即使是显式地,包管理器控制台也会返回错误:

PM> Enable-Migrations -ContextType SiteContext
The context type 'SiteContext' was not found in the assembly 'Site'.

但它就在代码中:

// Not in a namespace or anything
public class SiteContext : DbContext {
    // public DbSets in here
}

我可以在我的站点代码中的任何位置使用SiteContext,通过它的对象访问数据库等。只有 Enable-Migrations 命令找不到它。除此之外,Entity 的代码优先功能正常工作。

任何想法可能会发生什么?我在哪里搞砸了?

(实体框架 6.0.2 / 网页 3.1.1)

【问题讨论】:

  • 它与 ASP.NET (Web Forms) 有什么关系?如果不是,请编辑您的问题以将其从标题中删除 (which is not the proper place for tags)。
  • @abatishchev 首先,Web Pages 与 Web Forms 完全不同。其次,提到网页表明我没有使用 MVC,这是 ASP.NET 的默认假设。既然你是对的,这可能对问题并不重要,我已经删除了它。
  • 是的,抱歉,这是一个错字。我不能同意 ASP.NET = MVC。这绝对是不正确的,而不是 StackOverflow 上发生的事情。感谢您编辑您的问题。干杯!

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


【解决方案1】:

ASP.NET Web Pages 站点是使用 Web Site 项目类型构建的。此项目类型不支持实体框架迁移。如果您想将 Code First Migrations 与 ASP.NET 网页站点一起使用,则需要将数据访问代码开发为单独的类库。该项目类型确实支持 EF 迁移。我在这里写过博客:http://www.mikesdotnetting.com/Article/217/Code-First-Migrations-With-ASP.NET-Web-Pages-Sites

【讨论】:

  • 哇,没想到你会回答,迈克。我喜欢你对网页的报道,并早先阅读了那篇文章。我想我是从一个“Web 应用程序项目”开始的,我有一个 .csproj,但看看比较图表,我似乎已经使用网页创建了一个混合体。尽管该项目有 w.a.p.结构,当我更新 .cs 文件而不上传任何更新的二进制文件时,代码似乎会在更改时重新编译。使用网页是否会强制 w.s.p.类型生效?我可以直接把它移植到 w.a.p 吗?如果事实证明我错了?还是图书馆是唯一的选择?
  • 我不知道您是如何将 Web Pages 应用程序作为 Web 应用程序项目启动的。只有当您选择新网站而不是新项目时,Razor 网页站点才是一个选项 - 除非您启动了不同类型的项目并向其中添加了 .cshtml 文件(我没有尝试过,所以不知道它是否会工作)。在撰写本文时,我与 EF 团队进行了核对,他们说让迁移在网页中工作的唯一方法是创建一个单独的库。
  • 好的,很高兴知道,感谢您的帮助。我所做的是通过 New Project 创建一个新的空 Web 应用程序项目,然后通过包管理器安装 Web Pages。看起来图书馆是去这里的路。再次感谢!顺便说一句,有这个限制太糟糕了。我知道网站项目基本上已被弃用(根据注释here),并且它们似乎与网页相关联,网页也是如此。
  • 没有什么可以说网站项目正在被弃用。自 ASP.NET 2.0 发布以来,使用 Web 应用程序项目的建议实际上并没有改变,并且在很大程度上是对 Web 窗体开发人员的明智建议。它不适用于 MVC 开发人员或网页开发人员,因为这两个群体都无法选择他们的项目类型。
【解决方案2】:

使用 -ProjectName 并指定站点,而不是 -ContextType。

编辑:首先,试试 -ContextTypeName。我不得不假设你没有。

【讨论】:

  • 感谢您的建议。我试过-ContextTypeName SiteContext 和-ProjectName Site 都没有成功。
  • 嗯。我看到你没有命名空间。你在命名空间中得到相同的行为吗?
  • 是的,这是我早期的想法之一,试图让它发挥作用。如果我将它放在命名空间中,它不会改变任何东西。
猜你喜欢
  • 2020-04-13
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
相关资源
最近更新 更多