I reproduced your solution and found... a solution :)
- "Core" project - called ClassLibrary1
- "Relational" project - called EFClssLibrary
- WPF App project - called WpfApp1
Let's get to deepen.
1. Core project
Name: ClassLibrary1.
Type: .NET Standard 2.0 class library.
Dependencies: none.
In my test solution, it contains only one class, a model called Person.
Person.cs
namespace ClassLibrary1
{
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
}
2. Relational project
Name: EFClassLibrary.
Type: .NET Standard 2.0 class library.
Dependencies:
This project, in my test solution, contains only one class: the database context.
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);
}
}
}
Connection string
In this class a defined an used the connection string to connect to the database (assuming it's LocalDb SQL Server). If you want to put the connection string in a config file, you could add a shared config file in your solution and then reference that file in your App.config
file (for more informartion take a look at this page)
Configuring the target framework
In order to be able to add migrations on this project without setting as startup project other projects, you must set the target framework. Right click on the project and click on the Edit EFClassLibrary.csproj entry. Below the <TargetFramework>netstandard2.0</TargetFramework>
line, you should add another line which specify which framework you want to target. To target the .NET Framework 4.7 you should add
<TargetFramework>net47</TargetFramework>
A list of all allowed values can be found here.
My EFClassLibrary.csproj look like the code below after adding the .NET Framework 4.7 as target.
<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="..ClassLibrary1ClassLibrary1.csproj" />
</ItemGroup>
</Project>
Adding migrations
Now you are ready to add your first migration. Open the Package Manager Console and set as default project the EFClassLibrary. Also, set that project as startup project (right-click on the project and click on the Set as startup project entry).
Type
PM> Add-Migration Initial
then
PM> Update-Database
3. WPF App project
Name: WpfApp1.
Type: WPF Application using .NET Framework 4.7.
Dependencies:
In this project I added no files. A just edited the MainWindow.xaml.cs
file to check that everything works correctly.
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();
}
}
}
Hope it helps :)