Как использовать библиотечный таргетинг Entity Framework .Net 4.6.1 с .Net Core Application - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть библиотека репозитория, которую я использую с приложением MVC. Отлично работает без проблем.

В настоящее время я создаю новое клиентское приложение с использованием .Net Core. Я ссылался на свой существующий проект репозитория, который имеет целевую среду 4.6.1. Я могу построить без проблем.

Когда я пытался получить доступ к данным, используя существующий контекст БД. Я получил сообщение об ошибке, что не удалось найти строку DefaultConnection .

public class MyAppContext : DbContext
{
   public MyAppContext():base("name=DefaultConnection"){}

это соединение, которое у меня есть в моем config.json

 "ConnectionStrings": {
     "DefaultConnection": "Data Source=[SERVER]; Initial Catalog=[CATALOG]; User ID=[USERID];
 Password=[PASSWORD];MultipleActiveResultSets=true;"   },

Я добавил файл app.config в свое приложение .Net Core, как показано ниже

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="System.Data.SqlClient" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=[SERVER]; Initial Catalog=[CATALOG]; User ID=[USERID];
 Password=[PASSWORD];MultipleActiveResultSets=true; " providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

и теперь я получаю сообщение об ошибке ниже

Сообщение «Тип поставщика Entity Framework «System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer 'зарегистрирован в конфигурационном файле приложения для провайдера ADO.NET с инвариантным именем «System.Data.SqlClient» не может быть загружен. Убедитесь, что полное имя сборки используется и что сборка доступна для запущенного приложения. Смотрите http://go.microsoft.com/fwlink/?LinkId=260882 для более информация ". строка

Я попытался установить .net EntityFramework в свое основное приложение .net, и я получил предупреждение о том, что оно не будет полностью совместимо, и я получал ту же ошибку, только укороченная версия.

Как создать веб-приложение .Net Core для совместного использования библиотеки .Net 4.6, не переписывая их для использования .Net Core?

1 Ответ

0 голосов
/ 09 ноября 2018

Ответ - нет (в настоящее время).

Хотя Entity Framework Core может работать как с полной платформой NET, так и с NET Core (поскольку она поддерживает стандарт NET), Entity Framework 6 может работать только с полной платформой NET. См. Сравнить EF Core и EF6 .

AFAIK Существуют некоторые планы по добавлению поддержки NET Core (или NET Standard) в EF6 в будущем (не уверен, когда), на данный момент единственной возможностью является перенос кода EF6 в EF Core . Но обратите внимание, что есть фундаментальные различия, и EF Core все еще нестабилен (особенно перевод запросов в SQL) и может серьезно снизить производительность в случае использования сложных запросов LINQ. Если вы используете EF только для CRUD, то, вероятно, порт не так проблематичен.

...