Reputation: 2528
Recently migrated from EF Core 1.0 to EF Core 2.0, and it runs fine. Today I added a new table (code-first) and added it to my DbContext with:
public virtual DbSet<Foo> Foos { get; set; }
When I run a migration, with my DbContext in a separate project (remember this was all working before), the migration ends, but no migration files were created. This was all working prior to Core 2.0 using:
http://paultechguy.blogspot.com/2017/04/entity-framework-core-migrating-and.html
PM> Add-Migration GradePremade -project Mfc.MfcRepositoryModel -verbose -context MfcDbContext -StartupProject web.xyz
Using project 'class.xyz\Mfc.MfcRepositoryModel'.
Using startup project 'web.xyz'.
Build started...
Build succeeded.
C:\Program Files\dotnet\dotnet.exe exec --depsfile C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0\web.xyz.deps.json --additionalprobingpath C:\Users\pcarver\.nuget\packages --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --runtimeconfig C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0\web.xyz.runtimeconfig.json "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore.tools\2.0.0\tools\netcoreapp2.0\ef.dll" migrations add GradePremade --json --context MfcDbContext --verbose --no-color --prefix-output --assembly C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0\Mfc.MfcRepositoryModel.dll --startup-assembly C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0\web.xyz.dll --project-dir C:\development\xyz\class.xyz\Mfc.MfcRepositoryModel --root-namespace Mfc.MfcRepositoryModel
Using assembly 'Mfc.MfcRepositoryModel'.
Using startup assembly 'web.xyz'.
Using application base 'C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0'.
Using working directory 'C:\development\xyz\web.xyz'.
Using root namespace 'Mfc.MfcRepositoryModel'.
Using project directory 'C:\development\xyz\class.xyz\Mfc.MfcRepositoryModel'.
Finding DbContext classes...
Finding IDesignTimeDbContextFactory implementations...
Finding application service provider...
Finding BuildWebHost method...
No BuildWebHost method was found on type 'xyz.Program'.
No application service provider was found.
Finding DbContext classes in the project...
Found DbContext 'ApplicationDbContext'.
Found DbContext 'MfcDbContext'.
Using DbContext factory 'MfcContextFactory'.
Using context 'MfcDbContext'.
Finding design-time services for provider 'Microsoft.EntityFrameworkCore.SqlServer'...
Using design-time services from provider 'Microsoft.EntityFrameworkCore.SqlServer'.
Finding IDesignTimeServices implementations in assembly 'web.xyz'...
No design-time services were found.
No errors that seem obvious to me, and no migration files created. I've done a Remove-Migration to start clean, but still no workie.
Upvotes: 8
Views: 10211
Reputation: 543
DbContext class should have parametrless constructor and constructor with options. You have to Override OnConfiguring. Inside of it specified provider for exaple:
options.UseSqlServer(_connectionString);
Code sample:
public class AppDbContext : DbContext
{
private const string _connectionString = "Data Source=....;App=EntityFramework";
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{ }
public AppDbContext() : base()
{
}
public virtual DbSet<MyEntitie> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
if (options.IsConfigured)
{
return;
}
options.UseSqlServer(_connectionString);
}
}
At the end use command line and run this command (type file name of project where is your DbContext file), alternativly you can use nuget package manager console:
dotnet ef migrations -v -p App.csproj add Init
Upvotes: 0
Reputation: 382
I had a similar problem but none of the provided answers fixed it. After reviewing my .csproj-file
, I found that Visual Studio automatically added the following lines at some point:
<ItemGroup>
<Compile Remove="Migrations\**" />
<Content Remove="Migrations\**" />
<EmbeddedResource Remove="Migrations\**" />
<None Remove="Migrations\**" />
</ItemGroup>
After removing this ItemGroup
, updating my database worked correctly again.
Upvotes: 2
Reputation: 89
Just try to review the migrations ModelSnapshot.cs file, for differences in the name of a table, creations of relationships (at the end of the code).
Upvotes: 0
Reputation: 32785
There is an issue within the .NET Core class libraries. The successful workaround is to put the following in the csproj file of the Model
project:
<PropertyGroup>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
</PropertyGroup>
Upvotes: 7
Reputation: 77
I tried updating the runtime version in the .csproj file to include:
<RuntimeFrameworkVersion>2.0.3</RuntimeFrameworkVersion>
in the PropertyGroup tag. It worked for me.
See: Russell Seamer's Solution
Upvotes: -3
Reputation: 11
Remove all your IDesignTimeDbContextFactory<TContext>
implementations from your migrations project and register your DbContext
in your ConfigureServices
method in your startup class, the same way you would register when running the application.
Then run your migrations commands as usual, this worked for me after hours of headaches.
Upvotes: 1
Reputation:
You will need to update your Program
class to look like this
public class Program
{
public static void Main(string[] args)
{
var host = BuildWebHost(args);
host.Run();
}
// Tools will use this to get application services
public static IWebHost BuildWebHost(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
}
Upvotes: 2