无法将Lambda表达式转换为类型'ServiceLifetime',因为它不是Asp.net core 2.2上的委托类型

时间:2019-04-15 07:55:56

标签: c# entity-framework

为什么会出现此错误:

  

无法将lambda表达式转换为类型'ServiceLifetime',因为它不是委托类型[TokenAuthWebApiCore.Server]

在此代码行上:

public virtual void SetUpDataBase(IServiceCollection services)
{
    // Add framework services.
        services.AddDbContext<SecurityContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("SecurityConnection"), sqlOptions => sqlOptions.MigrationsAssembly("TokenAuthWebApiCore.Server")));
}

这是我的用法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton(Configuration);

    services.AddMvc();

    SetUpDataBase(services);

    // services.AddDbContext<SecurityContext>(options =>
    //      options.UseSqlServer(Configuration.GetConnectionString("SecurityConnection"), sqlOptions => sqlOptions.MigrationsAssembly("TokenAuthWebApiCore.Server")));

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

public virtual void SetUpDataBase(IServiceCollection services)
{
    // Add framework services.
        services.AddDbContext<SecurityContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("SecurityConnection"), sqlOptions => sqlOptions.MigrationsAssembly("TokenAuthWebApiCore.Server")));
}

这都是我的using语句

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.IdentityModel.Tokens;
using System.Text;

我想这可能是因为该教程是针对.net core的其他版本的教程,而我正在使用.net core 2.2版。您能告诉我如何解决此问题吗?谢谢。

8 个答案:

答案 0 :(得分:3)

SecurityContext不是DbContext。如果您的项目中有一个名为SecurityContext的DbContext,请从using System.Security;类的使用中删除Startups.cs或将DbContext重命名为SecurityDbContext之类。

调用AddDbContext时使用的通用类型来自System.Security命名空间,但是它应该是您的数据库上下文。

答案 1 :(得分:1)

我遇到了同样的问题。我使用的接口由我的DbContext实现。这为我解决了问题:

Splunk

答案 2 :(得分:0)

我的项目中有同样的错误。问题是我的上下文类不是从DbContext派生的。

public class SecurityContext : DbContext
{
}

答案 3 :(得分:0)

app.get('/auth/google',
  passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login'] }));

app.get('/auth/google/callback', 
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/');
  });

答案 4 :(得分:0)

我在数据项目中意外安装EntityFramework而不是Microsoft.EntityFrameworkCore时收到了此消息。

答案 5 :(得分:0)

将项目迁移到EF核心时,我遇到了同样的问题。发生的事情是仍为EF定义了数据库上下文。为了解决此问题,我更改了DbContext以包括EF内核,并添加了DbContextOptions构造函数。

aspnetcore site处的全部展开。

答案 6 :(得分:0)

与版本兼容性错误无关。您需要在项目中实现DbContext。制作上下文类时,需要从DbContext类继承上下文类。

答案 7 :(得分:0)

我安装了EntityFramework和EntityFrameworkCore,删除了EntityFramework并对其进行了排序