Migration: No DbContext was found in assembly - c#

Using VS Community 2017. I have tried to create initial migration with error message saying:
Both Entity Framework Core and Entity Framework 6 are installed. The Entity Framework Core tools are running. Use 'EntityFramework\Add-Migration' for Entity Framework 6.
No DbContext was found in assembly 'Test_Project'. Ensure that you're using the correct assembly and that the type is neither abstract nor generic.
... code in my dbcontext:
protected override void OnModelCreating(DbModelBuilder mb)
{
base.OnModelCreating(mb);
mb.Entity<Stuff>().ToTable("Stuff");
}
public DbSet<Stuff> Stuff{ get; set; }

In the Package Manager Console select the project where the DbContext is defined and run the command add-migration initial.
For example:public class SomeContext : DbContext

You have to specify the project name where the DbContext is located. So just right on the Nugget PM Console, type: Add-Migration MigrationName -Project YourProjectName.

Using the nuget package manager, I had installed all the EntityFrameworkCore dependencies, along with the EntityFramework 6 dependency. Visual Studio was using EF Core, when I needed it to be using EF 6. Uninstalling all EF Core dependencies resolved this issue.

When I had this issue, I had just renamed an existing project to "EF", then renamed all namespaces to "EF". What worked for me was I changed the Assembly name to something other than "EF" (Project properties/Application/Assembly Name). I was using VS Community 2019.

Just close the visual studio and restart your project and then write command again. It worked for me twice

I solved the problem by renaming the project, before that it coincided with the name of the solution.

Related

Using EF 6.4 with Core 3.1 (blazor) - does it work?

I have an old solution using EF, and I would like to upgrade my presentation project to core 3.1 in order to use blazor. I would like to keep using EF, so I have upgraded to 6.4.
I did read some news about EF 6.4 being supported in .NET Core, but I'm struggling to make it work.
All my projects are standard 2.1, except my .NET Core 3.1 project. I am able to build the projects, but I'm not able to add the context to startup.
I've tried the following:
public class MyCustomDbContext : DbContext
{
public MyCustomDbContext(string connString) : base(connString)
{
}
public DbSet<NewsItem> NewsItems { get; set; }
}
Startup:
services.AddScoped<MyCustomDbContext>(_ => new MyCustomDbContext(Configuration.GetConnectionString("DefaultConnection")));
Error:
No DbContext was found in assembly 'Core.Entities'. Ensure that you're
using the correct assembly and that the type is neither abstract nor
generic.
You project configuration is all good.
The error you are seeing is caused by trying to (automatically) run migrations om a project that does not have a DbContext.
The startup project runs the migrations, but the DbContext is in another project.
To configure EF to target the project containing the DbContext, add a migration like this:
Add-Migration EmptyMigration -ProjectName "Core.Entities" -StartUpProjectName "Core.Presentation"
Where Core.Entities is the project containing the DbContext, and Core.Presentation is your startup project.

Entity Framework - The migrations configuration type was not be found in the assembly

I have multiple DbContexts in a C# project and I'm trying to enable migrations. When I specify the full command, i.e.:
Enable-Migrations -ContextTypeName Models.Account.AccountDetailDbContext
A migrations folder is created, with the configuration class, but I then get a message:
Checking if the context targets an existing database...
And then
The migrations configuration type 'Portal.WebUI.Migrations.Configuration' was not be found in the assembly 'Portal.WebUI'.
Even though it has just created the file, it can't find it.
I have the correct project selected in the Package Manager Console
I have tried the command using -verbose, but it gives no additional information
If I copy the dbcontexts and classes into a new project then it all works, so it must be something in this existing project that is making the migration fail, but I can't tell what it is.
I solved this by adding EntityFrameworkCore\ before Add-Migration, i.e. the final statement was:
EntityFrameworkCore\Add-Migration
After give a name for your new migration.
I faced this problem. My solution:
Exit visual studio
Open your project again on visual studio
Rebuild solution
Then the error removed. And I can run the command.
After you run Enable-Migrations and the Configuration file is created, rebuild the project and run Enable-Migrations -Force again.
I had this problem and it was solved by changing the dropdown box at the top of the Package Manager Console to choose the correct project. You may need to maximise the width of the package manager console to see this box.
I managed to resolve this by uninstalling the EF nuget package and then reinstalling it.
I have stumbled upon this problem, and after endless hours of googling and trial and error, the solution to my specific problem was much easier.
Just make sure you have all your EF related nuget packages up to date.
I tried every answer I could find here, but what ended up working for me was: Select all EF related nuget packages
(In my case)
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
EntityFramework
And update them all, into their latest version (In my case)
The issue was that one of the defaults I downloaded of one of these NuGet packages, was outdated and invalid.
Another possible issue worth checking: is your project signed? As I just discovered, this problem can also eventuate if the assembly is signed with a strong name key file. Part of the EntityFramework tool kit is migrate.exe which is called during the migration process. It appears if the assembly is signed, this application can't find the configuration type.
Solution seems to be <Project> → Properties → Signing: untick "Sign the assembly", at least while performing migration tasks. Tick it back when you're done.
I also had this issue because of a spelling mistake in a namespace
I was facing the same issue. What I found was that in my project name, "-" was included as "abc-xyz". I deleted my project and recreated it as "abcxyz" and it worked. Don't rename the project—you have to rename it at every reference. In this case, first uninstall EF and rename it, then install EF again.
I have faced this problem due to version update of EF package. I have solved by reinstalling:
1.Microsoft.EntityFrameworkCore.SqlServer
2.Microsoft.EntityFrameworkCore.Tools
3.Microsoft.EntityFrameworkCore.Design
4.Microsoft.EntityFrameworkCore
The solution is to check the project reference. In my case, I have added Entity Framework and Entity Framework Core references to my project.
To Resolve this I have removed Entity Framework Reference from the project and now EF Core migration commands are working.
using Microsoft.EntityFrameworkCore.SqlServer;
using Microsoft.EntityFrameworkCore.Tools;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.EntityFrameworkCore;
Then:
Use EntityFramework6\ before Add-Migration for Entity Framework 6.
Like EntityFrameworkCore6\Add-Migration
In this case First, check NuGet packages
Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.Design
most probably missing one of the above packages you get an error.
if missing then install and
do migration using
Add-Migration InitialCreate

DBSet<entity> class not found (Entity Framework loading wrong DLL?)

In my Visual Studio 2015 project I have a declaration
public DBSet<Page> Pages { get; set; }
which gives me the error
The type or namespace name 'DBSet' could not be found (are you missing a using directive or an assembly reference?)
.. which shouldn't be happening because I have ...
using System.Data.Entity;
at the start of the file.
DBSet class was introduced in Entity Framework 5. I 'm using V 6.1.32.
I have a feeling this is related to my other problem: ModelConfiguration does not exist in the namespace 'System.Data.Entity'
It appears that in spite of having EF 6 installed somehow a DLL of EF 4 is being used. If I try to manually add a reference to system.data.entity (obviously not a good idea) 4.0.0.0 is the version number that is shown.
I tried the following sequence (as was suggested in a comment in my other question)...
Uninstall EF using NuGet.
Delete bin folder
Reinstall EF using NuGet
I even tried uninstalling and reinstalling VS 2015.
Is there another folder in my project or my computer that contains DLLs that may be used by VS?
When I installed SQL Server Management Studio 2014, VS 2010 was also automatically installed. Could this be interfering with VS 2015?
I'm getting quite desperate as this is stopping me from continuing my MVC project.
Check your casing. I believe it is: DbSet<T>. So, in this case:
public DbSet<Page> Pages { get; set; }

EF 5 Enable-Migrations : No context type was found in the assembly

I have 4 projects :
Toombu.Entities : all models are there
Toombu.DataAccess: Mapping, Repository and ToombuContext
Toombu.Logique : Logic of my application
Toombu.Web : MVC 4 application. With all others DLL.
I tried to enable migration in Toombu.Web but i had this error :
No context type was found in the assembly
How can I enable migration ?
I am surprised that no one mentioned the obvious answer to this question: Entity Framework requires a context before enable-migrations will work. The error message the OP posted suggests that no context was found. Sure, it could be because the package manager console doesn't "see" the context--in which case the accepted answer is a possible solution (another solution is one I suggest, below). But a context must exist in the current project (assembly) before any other solutions will work.
What does it mean to have a context? It means that there must exist a class in your project that inherits from DbContext (in System.Data.Entity). Here is an example:
public class MyDbContext : DbContext
{
public MyDbContext()
{
}
}
Be sure you use
using System.Data.Entity;
before the code above has access to the DbContext class and that you have used NuGet to get Entity Framework 4.1 or later for the current project.
If all along you had a context but the Package Manager Console just doesn't "see" it: In Visual Studio 2013 you don't have to use the -ProjectName switch. Instead, go to the Package Manager Console (it's available in the View | Other Windows list), and look at the two dropdowns that appear at the top of the Package Manager Console dockable window. The first dropdown is for Package Source; the second is for Default Project. If you dropdown the Default Project and select a project in your solution then whatever commands you issue in the Package Manager console will be executed against the selected project.
use -ProjectName option in Package Manager Console:
Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
Change the default project and choose the startup project from dropdown:
In my case, the NuGet package "Microsoft.EntityFrameworkCore.Tools" was missing
If anyone is still facing this problem. I solved it by using the following command:
Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME>
Don't forget to use the full path to your context name.
You dbcontext is in Toombu.DataAccess So you should enable migrations in Toombu.DataAccess.
I created a Class in the Models directory called: myData with the following code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace Vidly.Models
{
public class MyDbContext : DbContext
{
public MyDbContext()
{
}
}
}
rebuilt the app with: control-shift-b
then ran the following in the nuGet Console:
Enable-Migrations -StartUpProjectName Vidly -ContextTypeName Vidly.Models.MyDbContext -Verbose
the Console returned:
Using StartUp project 'Vidly'.
Using NuGet project 'Vidly'.
Checking if the context targets an existing database...
Code First Migrations enabled for project Vidly.
Enable-Migrations -StartUpProjectName Vidly -ContextTypeName Vidly.Models.myData -Verbose
And the FrameWork created a Migrations directory and wrote a Configuration.cs template in there with the following code:
namespace Vidly.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration<Vidly.Models.MyDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(Vidly.Models.MyDbContext context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data.
}
}
}
Follow the below steps to resolve the issue
Install-Package EntityFramework-IncludePrerelease
or Install entity framework from Nuget Package Manager
Restart visual studio
After that I was getting "No context type was found in assembly"
To resolve it - This "No context" that mean you need to create class in "Model" folder in your app with suffix like DbContext ... like this AppDbContext. There you need to include some library using System.Data.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace Oceans.Models
{
public class MyDbContext:DbContext
{
public MyDbContext()
{
}
}
}
After that run the below command on Package Manager:
Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>
My Project Name is - MyFirstApp and AppDbContext is inside the Model Folder so path is like
Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext
In mosh tutorial, individual user account was selected which created a db context in the template.
Also, make sure EntityFramework is installed in the Nuget package manager.
If you use Both Entity Framework 6 and Entity Framework Core are installed. The Entity Framework 6 tools are running.
Use EntityFrameworkCore\Enable-Migrations for Entity Framework Core. same as for add migration and update database.
Thanks for the suggestions, I solved the problem by combining all the solutions here. At first I created the DbContext Model:
public class MyDbContext: DbContext
{
public MyDbContext()
{
}
}
After creating the dbcontext class, I ran the enable-migration command with the project Name: enable-migrations -ProjectName YourProjectName
I had to do a combination of two of the above comments.
Both Setting the Default Project within the Package Manager Console, and also Abhinandan comments of adding the -ContextTypeName variable to my full command. So my command was as follows..
Enable-Migrations -StartUpProjectName RapidDeploy -ContextTypeName RapidDeploy.Models.BloggingContext -Verbose
My Settings::
ProjectName - RapidDeploy
BloggingContext (Class Containing DbContext, file is within Models folder of Main Project)
My problem was link---->
problem1
I solved that problem with one simple command line
Install-Package EntityFramework-IncludePrerelease
After that, i needed to face with one more problem, something like:
"No context type was found in assembly"
I solve this really easy. This "No context" that mean you need to create class in "Model" folder in your app with suffix like DbContext ... like this MyDbContext.
There you need to include some library using System.Data.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace Oceans.Models
{
public class MyDbContext:DbContext
{
public MyDbContext()
{
}
}
}
After that,i just needed this command line:
Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>
I got this problem first:
PM> add-migration first
No migrations configuration type was found in the assembly 'MyProjectName'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).
then i tried this:
PM> Enable-Migrations
No context type was found in the assembly 'MyProjectName'.
Then the right command for me :
PM> Enable-Migrations -ProjectName MyProjectName -ContextTypeName MyProjectName.Data.Context
After that i got this error message even though Context inherits from DbContext
The type 'Context' does not inherit from DbContext. The DbMigrationsConfiguration.ContextType property must be set to a type that inherits from DbContext.
Then i Installed
Microsoft.EntityFrameworkCore.Tools
ITS OK NOW but the message is funny. i already tried add migrations at first :D
Both Entity Framework Core and Entity Framework 6 are installed. The Entity Framework Core tools are running. Use 'EntityFramework6\Enable-Migrations' for Entity Framework 6.
Enable-Migrations is obsolete. Use Add-Migration to start using Migrations.
Change the default project to data access
change the default project dropdown in the package manager console to data access and give enable migrations...
Thats all success
Using the Package Manager, you need to re-install Entity Framework:
Uninstall-Package EntityFramework -Force
Then install it for each project:
Install-Package EntityFramework
Then do not forget to restart the studio.
Ensure you are using the same version of Entity Framework across all projects using the NuGet Package Manager.
Recent windows updates may have installed a newer version of Entity Framework into your active project.
Background:
Around 16 Mar 2016, I started getting this error when trying to add migrations to a project where I had already enabled migrations and had successfully done migrations for.
I noticed that around March 10, a new stable version of Entity Framework 6 had been released.
If I specified the -ContextTypeName parameter in the enable-migrations command, I got an error indicating the migrations were already enabled.
Resolution:
1) Tools -> Nuget Package Manager -> Manage Nuget Packages for Solution
2) (Not sure if this step is necessary, but..) I updated my version of the Nuget Package Manager to the latest version. Also, after updating my version of Nuget Package Manager, I had to restart Visual Studio twice before the NuGet Command line would work properly.
3) Tools -> Nuget package Manager -> Manage Nuget Packages for Solution -> Search Installed packages -> Type Entity Framework
a. You may see more than one version of Entity Framework there.
b. Click Manage on each version of Entity Framework and ensure that your projects are using the SAME version of Entity Framework.
Uncheck the version of Entity Framework that you are not using and for the version of Entity Framework you ARE using make sure it is checked across your projects that need it.
Again, as noted in step 2, I had to restart visual studio twice to get the NuGet Package Manager Console to work properly after updating my version of the NuGet Package Manager. I got an error starting the console the first time, and
"exception calling createinstancefrom with 8 arguments could not load file or assembly EntityFramework" when running the enable-migrations command the second time.
Restarting visual studio seemed to resolve those issues, however.
This error getting because of the compiler not getting 'Context' class in your application. So, you can add it manually by Add --> Class and inherit it with 'DbContext' Class
For Example :
public class MyDbContext : DbContext
{
public DbSet<Customer> Customer { get; set; }
public MyDbContext()
{
}
}
I have been getting this same problem. I have even tried above enable migrations even though I have already done. But it keeps giving same error. Then I had to use the force switch to get overcome this problem. I am sure this will help in someone else's case as well as its a possible work around.
After enabling migration with force, you should update your database (Make sure default project is set correctly). Otherwise you will get another problem like explicit migrations are pending.
Then just execute your add-migrations or any other commands, it should work.
Enable-Migrations -ProjectName <PROJECT_NAME> -ContextTypeName <FULL_CONTEXT_NAMESPACE.YOUR_CONTEXT_NAME> -force
Adding a class which inherits DbContext resolved my problem:
public class MyDbContext : DbContext { public MyDbContext() { } }
How to Update table and column in mvc using entity framework code first approach
1: tool > package manager console
2: select current project where context class exist
3: Enable migration using following command
PM > enable-migrations
4: Add migration folder name using following command
PM > add-migration MyMigrationName
4: Now update database following command
PM > update-database
enable-migrations -EnableAutomaticMigration:$false with this command you can enable migration at Ef 6.3 version because C# enable as default migrations at Ef 6.3 version.
I have encountered this problem a few times and in my case I uninstalled EntityFramework nuget package and installed EntityFrameworkCore nuget package, entityFramework.design and entityframework.tools
I got the same error when I had Authentication disabled/chose "No Authentication'. I re-made my project and chose "Individual User Accounts" and I didn't get the error anymore.
When I faced the same problem, I found that I had renamed my project in the solution explorer.
I needed to open the project in notepad and change the old name to new name.
OPs question was for EF5; I had the same problem with EF6, and my experience was quite similar. Multiple answers here reference EntityFrameworkCore, but using that was a huge misdirect for me.
It seems many things can cause the OPs error; I think both jazimov and Sadjad Khazaie presented good solutions that are useful for both EF and EFCore. However, when I had EFCore installed alongside EF6, that actually CAUSED this problem. It seems that my existing EF6 codebase was using EF6 migrations, and with EntityFrameworkCore packages installed, I got the No context type was found in the assembly error because the EFCore add-migration command was running.
When I removed the EntityFrameworkCore packages, the problem went away.
Note: sometimes I got a warning that both EntityFrameworkCore and EntityFramework were installed when I ran add-migration, but not always. One way to be sure: try enable-migrations, which is available with EntityFramework but is not available (or necessary) with EntityFrameworkCore.
Create a File called MyDBContext inside Models Folder
using System.Data.Entity;
namespace VSR.Models
{
public class MyDbContext: DbContext
{
public MyDbContext()
{
}
}
}
Now Try to execute Enable-migrations. It will work.
namespace EntityFrameworkCodeFirst.Module
{
public class MyDbContext: DbContext
{
public MyDbContext()
{
}
}
}
And if you have Multiple project in one solution than you have to use below commands:-
Enable-Migrations -ProjectName EntityFrameworkCodeFirst
Worked for me:
UnInstall-Package EntityFramework
Restart Visual Studio
Install-Package EntityFramework
Build project

Entity Framework 4.3 migrations error

I've just installed EF 4.3-beta1 for the migrations goodness, and I can't get it working. The error I get:
PM> Update-Database -Verbose
Using NuGet project 'Project.Domain'.
Using StartUp project 'ProjectWebSite'.
System.InvalidOperationException: No migrations configuration type was found in the assembly 'Project.Domain'.
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindConfiguration()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
No migrations configuration type was found in the assembly 'Project.Domain'.
I've added a new column to 2 EF classes:
public class MasterInstance
{
public int MasterInstanceId { get; set; }
[Required] public string HostName { get; set; }
[Required] public string Name { get; set; } /* <-- THIS IS NEW */
[Required] public string ConnectionString { get; set; }
public virtual ICollection<MasterInstanceLocation> MasterInstanceLocations { get; set; }
}
And my DbContext looks like this:
public class ProjectDontext: DbContext, IProjectContext
{
public IDbSet<Installer> Installers { get; set; }
public IDbSet<MasterInstance> MasterInstances { get; set; }
public IDbSet<MasterInstanceLocation> MasterInstanceLocations { get; set; }
}
Any ideas? My EF classes & context live in a separate assembly (Project.Domain). I've tried running the update-database in the context of both the main website and the domain project, and I get the same error either way.
-- EDIT --
Solution found. It turns out, that you need to enable migrations for your project. You can do this by running Enable-Migrations in the NuGet console (make sure you have the right project selected - for me this was the project.domain project).
This walkthrough provides more information
Solution found. It turns out, that you need to enable migrations for your project. You can do this by running Enable-Migrations in the NuGet console (make sure you have the right project selected - for me this was the project.domain project).
This walkthrough provides more information
Sometimes, even if you have enabled migration, this problem can occur. It means that configuration file has been deleted. In this case, you can run
Enable-Migrations -Force
in the Package Manager Console. -Force parameter is to override migration configuration file.
If you had already enabled migrations and just started seeing this error after some windows updates, ensure you are using the same version of Entity Framework across all projects using the NuGet Package Manager.
Recent windows updates may have installed a newer version of Entity Framework into your active project.
Background: Around 16 Mar 2016, I started getting the "no migrations configuration type" error when trying to add migrations to a project where I had already enabled migrations and had successfully done migrations before.
I noticed that around March 10, a new stable version of Entity Framework 6 had been released.
If I specified the -ContextTypeName parameter in the enable-migrations command, I got an error indicating the migrations were already enabled.
Another error I got as I was troubleshooting indicated that the Configuration type was not inheriting from the System.Data.Entity.ModelConfiguration.EntityTypeConfiguration, even though it was.
That led me to believe different versions of the Entity Framework were conflicting.
Resolution:
1) Tools -> Nuget Package Manager -> Manage Nuget Packages for Solution
2) (Not sure if this step is necessary, but..) I updated my version of the Nuget Package Manager to the latest version. Also, after updating my version of Nuget Package Manager, I had to restart Visual Studio twice before the NuGet Command line would work properly.
3) Tools -> Nuget package Manager -> Manage Nuget Packages for Solution -> Search Installed packages -> Type Entity Framework
a. You may see more than one version of Entity Framework there.
b. Click Manage on each version of Entity Framework and ensure that your projects are using the SAME version of Entity Framework.
•Uncheck the version of Entity Framework that you are not using and for the version of Entity Framework you ARE using make sure it is checked across your projects that need it.
Again, as noted in step 2, I had to restart visual studio twice to get the NuGet Package Manager Console to work properly after updating my version of the NuGet Package Manager. I got an error starting the console the first time, and "exception calling createinstancefrom with 8 arguments could not load file or assembly EntityFramework" when running the enable-migrations command the second time.
Restarting visual studio seemed to resolve those issues, however.
For me, this error occurred because I had the wrong project selected in the Package Manager Console's "Default Project" in VS2019.
Even when migration are enabled, the described behavior can occur if an incorrect Default Project has been chosen in the drop-down menu of the Package Manager Console. A non-graphical way around is to expand the command you are using, and specify the correct project name with the parameter -ProjectName
Update-Database -Verbose -ProjectName TheCorrectProjectName
You might still get a warning like
Cannot determine a valid start-up project. Using project 'TheCorrectProjectName' instead. Your configuration file and working directory may not be set as expected. Use the -StartUpProjectName parameter to set one explicitly.
Nevertheless, this additional command line parameter solved the issue for me.

Categories

Resources