Я воспроизвел ваше решение и нашел ... решение:)
- «Основной» проект - называется ClassLibrary1
- «Реляционный» проект - называется EFClssLibrary
- Проект приложения WPF - называется WpfApp1
Давай углубимся.
1. Основной проект
Имя : ClassLibrary1 .
Тип : .NET Standard 2.0 библиотека классов .
Зависимости : нет.
В моем тестовом решении оно содержит только один класс, модель под названием Person .
Person.cs
namespace ClassLibrary1
{
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
}
2. Реляционный проект
Имя : EFClassLibrary .
Тип : .NET Standard 2.0 библиотека классов .
Зависимости :
Этот проект в моем тестовом решении содержит только один класс: контекст базы данных.
ClientDbContext.cs
using ClassLibrary1;
using Microsoft.EntityFrameworkCore;
namespace EFClassLibrary
{
public class ClientDbContext : DbContext
{
const string connectionString = "Server=(localdb)\\mssqllocaldb;Database=ClientDb;Trusted_Connection=True;";
public ClientDbContext() : base() { }
public ClientDbContext(DbContextOptions<ClientDbContext> options) : base(options) { }
public DbSet<Person> People { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(connectionString);
}
}
}
Строка подключения
В этом классе определена используемая строка подключения для подключения к базе данных (при условии, что это SQL Server LocalDb). Если вы хотите поместить строку подключения в файл конфигурации, вы можете добавить общий файл конфигурации в свое решение, а затем сослаться на этот файл в файле App.config
(для получения дополнительной информации посмотрите эту страницу )
Настройка целевой структуры
Чтобы иметь возможность добавлять миграции в этот проект, не устанавливая в качестве стартового проекта другие проекты, необходимо установить целевую среду. Щелкните правой кнопкой мыши на проекте и выберите запись Edit EFClassLibrary.csproj . Ниже строки <TargetFramework>netstandard2.0</TargetFramework>
вы должны добавить еще одну строку, в которой указывается, на какую платформу вы хотите ориентироваться. Для нацеливания на .NET Framework 4.7 вы должны добавить
<TargetFramework>net47</TargetFramework>
Список всех допустимых значений можно найти здесь .
My EFClassLibrary.csproj выглядит как приведенный ниже код после добавления .NET Framework 4.7 в качестве цели.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net47</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" />
</ItemGroup>
</Project>
Добавление миграций
Теперь вы готовы добавить свою первую миграцию. Откройте консоль диспетчера пакетов и установите в качестве проекта по умолчанию EFClassLibrary . Кроме того, установите этот проект в качестве запускаемого проекта (щелкните правой кнопкой мыши проект и выберите запись Установить в качестве запуска проекта ).
Тип
PM> Add-Migration Initial
тогда
PM> Update-Database
3. Проект приложения WPF
Имя : WpfApp1 .
Тип : Приложение WPF с использованием .NET Framework 4.7 .
Зависимости :
В этом проекте я не добавил файлов. Просто отредактировал файл MainWindow.xaml.cs
, чтобы убедиться, что все работает правильно.
MainWindow.xaml.cs
using ClassLibrary1;
using EFClassLibrary;
using System.Windows;
namespace WpfApp1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var db = new ClientDbContext();
db.People.Add(new Person()
{
Name = "Omar"
});
db.SaveChanges();
}
}
}
Надеюсь, это поможет:)