Ответ 1
Это известная проблема в системе проектов. Смотрите dotnet/project-system # 1741
Я новичок в ядре EF, и я пытаюсь заставить его работать с моим основным проектом asp.net.
Я получаю вышеуказанную ошибку в моем startup.cs
при попытке confiugure dbcontext использовать строку подключения из config. Я следую этому руководству: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro
Проблемный код в startup.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using tracV2.models;
using tracV2.data;
namespace tracV2
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddSingleton<IConfiguration>(Configuration);
string conn = Configuration.GetConnectionString("optimumDB");
services.AddDbContext<tracContext>(options => options.usesqlserver(conn));
}
Метод usesqlserver
распознается, если я помещаю его непосредственно в контекст:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace tracV2.data
{
public class tracContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("myrealconnectionstring");
}
Все мои поисковые онлайн-запросы указывают на недостающие ссылки, но я не могу найти, какой из них мне не хватает (см. изображение). ссылки
Любая помощь будет принята с благодарностью,
Спасибо
Это известная проблема в системе проектов. Смотрите dotnet/project-system # 1741
Мы устанавливаем пакет NuGet для Microsoft.EntityFrameworkCore.SqlServer.
Microsoft.EntityFrameworkCore.SqlServer
PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer
Тогда
services.AddDbContext<AspDbContext>(options =>
options.UseSqlServer(config.GetConnectionString("optimumDB")));
Обновление не забудьте добавить пространство имен using Microsoft.EntityFrameworkCore;
добавление
using Microsoft.EntityFrameworkCore;
вручную решил проблему для меня
Установите ниже пакет NuGet решит вашу проблему
Microsoft.EntityFrameworkCore.SqlServer
Пакет установки Microsoft.EntityFrameworkCore.SqlServer
Я использовал код Visual Studio.
1) Попробуйте установить пакет "Microsoft.EntityFrameworkCore.SqlServer", указав номер версии.
Код VS:
'dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'
Visual Studio: -
'Install-Package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'
Ссылка " Пакет" Microsoft.EntityFrameworkCore.SqlServer "несовместима со" всеми "фреймворками в проекте " для этого.
2) Затем добавьте пространство имен с помощью Microsoft.EntityFrameworkCore; 'вручную в файле Startup.cs.
Перейдите по ссылке ниже https://github.com/aspnet/EntityFramework/issues/7891.
3) Если вы обнаружите какую-либо проблему с зависимостью для "Microsoft.EntityFrameworkCore.SqlServer.Design", например "Пакет" Microsoft.EntityFrameworkCore.Design "несовместим со" всеми "фреймворками в проекте " ", нам нужно выполнить следующую команду:
Код VS: -
dotnet добавить пакет Microsoft.EntityFrameworkCore.Design -v 1.1
Visual Studio
Установить-пакет Microsoft.EntityFrameworkCore.Design -v 1.1
Проект → ManageNugetPackages → Обзор → Поиск "Microsoft.EntityFrameworkCore.SqlServer" и установите или обновите.
Следуйте инструкциям ниже.
Установите Entity Framework Core Design и поставщик базы данных SQL Server для Entity Framework Core:
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Импортировать Entity Framework Core:
using Microsoft.EntityFrameworkCore;
И настройте свой DbContext:
var connectionString = Configuration.GetConnectionString("myDb");
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(connectionString)
);
Я считаю, что это можно решить, добавив ссылку на проект в Microsoft.EntityFrameworkCore.SqlServer.Design
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
Microsoft.EntityFrameworkCore.SqlServer не был непосредственно установлен в моем проекте, но пакет .Design все равно установит его как необходимое условие.
сначала добавьте Install-Package Microsoft.EntityFrameworkCore.SqlServer
затем добавьте в ваш файл .cs, using Microsoft.EntityFrameworkCore;
наконец, добавьте это в ваш основной файл Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFrameworkSqlServer().AddDbContext<ApplicationContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
}
Я обошел это просто:
Добавьте SqlServerDbContextOptionsExtensions
к рассматриваемому классу
Разрешить SqlServerDbContextOptionsExtensions
Это исправляет проблему, по умолчанию должно отсутствовать какая-либо ссылка.
Для тех, у кого все еще есть эта проблема: используйте NuGet для установки: Microsoft.EntityFrameworkCore.Proxies
Эта проблема связана с использованием Castle Proxy с EFCore.
Если вы столкнулись с этой проблемой в случае Sqlite, то
Я думаю, что это проблема с версией Sqlite, у меня была такая же проблема, когда я использовал эти версии SqLite
Версия 2.2.4:
После проверки версии здесь я изменил версию, после чего она заработала.
Нет ошибок после использования этого
Версия 2.1.2:
Как отмечается в ответе Win с наибольшим количеством очков, вам может понадобиться установить пакет NuGet Microsoft.EntityFrameworkCore.SqlServer, но учтите, что этот вопрос использует ядро asp.net mvc. В последнюю версию ASP.NET Core 2.1 MS включила так называемый метапакет под названием Microsoft.AspNetCore.App
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage-app?view=aspnetcore-2.2
Ссылку на него можно увидеть, если щелкнуть правой кнопкой мыши проект ASP.NET Core MVC в обозревателе решений и выбрать Edit Project File
Вы должны увидеть этот метапакет, если основное веб-приложение ASP.NET применяет оператор using
<PackageReference Include="Microsoft.AspNetCore.App" />
Microsoft.EntityFrameworkCore.SqlServer включен в этот метапакет. Так что в вашем Startup.cs вам может понадобиться только добавить:
using Microsoft.EntityFrameworkCore;
Копирование следующего кода в TodoApi.csproj из https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi разрешило аналогичную проблему для меня.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>
</Project>
Microsoft.AspNetCore.All может быть чрезмерным, но включает в себя EntityFrameworkCore
Для asp.net core версии 2.1 обязательно добавьте следующий пакет, чтобы решить проблему. (По крайней мере, это решит проблему с использованием SQLite)
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
Вот ссылка на документацию с использованием SQLite с ядром платформы сущностей. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite
Я должен был использовать линию
services.AddEntityFrameworkSqlite().AddDbContext<MovieContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
в методе ConfigureServices в Startup.cs
Ух ты так много ответов, но никто не упомянул этот пакет Microsoft.EntityFrameworkCore.InMemory !
Добавьте ссылку на этот пакет: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2"/>
и все будет хорошо.