【问题标题】:Webapi 2 ApplicationContext missing缺少 Webapi 2 ApplicationContext
【发布时间】:2014-02-07 04:06:22
【问题描述】:

我很难在 WebApi 2 默认项目中找到“ApplicationContext”。在 MVC5 应用程序中,模型中有一个名为 ApplicationContext 的类,它使用 web.config 中定义的 ConnectionString:

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
}

在 MVC5 网页项目中添加 DbSet 并在一个上下文中拥有所有数据很容易,但是我在 webapi 2 项目中找不到此类。

在 WebApi 项目中的某处必须有一个扩展 DbContext 或 IdentityDbContext 的类,该类也使用连接字符串,但我搜索了整个项目但找不到它。是否可以在 webapi 2 项目中拥有一个应用程序范围的 DbContext,该项目包含所有帐户数据(用户名、pw 哈希、角色、外部登录等)和我定义的所有其他数据(DbSets)?

ApiController 中似乎有一个 UserManager 类,但我看不到如何在其中添加我自己的自定义数据。

【问题讨论】:

    标签: c# asp.net asp.net-web-api asp.net-mvc-5


    【解决方案1】:

    ApplicationDbContext 类不是框架的一部分,因此您必须自己添加。如果它不包含在模板中,您可以像在代码 sn-p 中那样轻松地自己添加它。在您的情况下,您将创建一个派生自 IdentityDbContext 的上下文,而后者又派生自 DbContext。在这种情况下,您可以添加自定义 DbSet。如果您无法创建此上下文,请将其从现有的 MVC5 项目(我猜您已经存在)复制到您的 Web API 项目。

    如果有任何错误,请确保您的项目中有适当的 NuGet 引用,尤其是 ASP.NET Identity 的实体框架实现。

    【讨论】:

    • 但是如何为 IdentityUser 设置 [Required] 和 [StringLength] 属性?我尝试将 DbSet Users 添加到新创建的 ApplicationContext 并使用 EntityTypeConfigurations 来配置Required 和 Stringlength 属性,但出现此错误:不支持每种类型的多个对象集。对象集“Users”和“Users”都可以包含“Applicationuser”类型的实例(扩展 IdentityUser)。所以现在我只剩下一个允许空值并且对用户名长度没有限制(除了绑定模型)的数据库。
    • 您不必为 IdentityUser 实现添加 DbSet。这就是您收到此错误消息的原因。 null 值绝对是一个问题,但您已经提到了一个很好的解决方法:在您的视图/绑定模型上设置属性。如果您正确执行此操作,API 的用户将无法插入长度为 f.e. 的用户名。三十个字符。
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多