EntityFramework 7 (EF7) Migrazioni. DbContext e Progetto di avvio sono in diversi assembly

asp.net-core-mvc entity-framework-core

Domanda

Sto cercando di utilizzare le migrazioni in EF7 con entityframework.commands. Ma il mio DbContext è in assembly diversi con il progetto Start-up (asp.net mvc è un progetto di avvio e Core.Implementation ha un DbContex).

dnx. migrazione ef aggiungi MyMigration -c MyContext

System.InvalidOperationException: non è stato trovato alcun DbContext denominato "MyContext".

Ho provato ad usare namespace per puntare ad altri assembly ma non ha funzionato neanche. È possibile a tutti? O devo solo mettere il mio contesto in assembly dove è il comando ef7?

Risposta accettata

Per problemi # 639 , # 2256 , # 2293 , # 2294 , # 2357 , # 2553 e # 2748 , abbiamo un po 'di lavoro da fare in quell'area. :-)


Risposta popolare

MODIFICARE

Dal momento che 1.0.0-rc1-final (forse prima) questo workaroud non è necessario

  • Ora non hai bisogno di App.DataAccess/Startup.cs (basta eliminarlo se hai utilizzato la soluzione qui sotto)
  • Crei / esegui migrazioni dal tuo progetto principale (in questo caso App.Web )
  • Tuttavia è necessario specificare il progetto ( -p paramater) contenente le migrazioni:

cd App.Web
dnx ef migrations add NewMigration -p App.DataAccess

Se si dispone di più contesti del database, è necessario specificare quale utilizzare (parametro -c )

cd App.Web
dnx ef migrations add NewMigration -p App.DataAccess -c YourDbContext

FINE MODIFICA

Ho scoperto una soluzione per questo

Supponiamo di avere 2 progetti: App.Web e App.DataAccess

Puoi aggiungere una classe di avvio molto semplice al tuo App.DataAccess :

>App.Web
-->Startup.cs // your main startup
>App.DataAccess
-->path/to/ApplicationDbContext.cs
-->different/path/to/YourModels.cs
-->Startup.cs // add a simple startup class
-->project.json

La semplice classe di avvio ( App.DataAccess\Startup.cs ):

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.Data.Entity;
using Microsoft.Dnx.Runtime;
using Microsoft.Framework.Configuration;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.Logging;

namespace App.DataAccess
{
    public class Startup
    {
        public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
        {
            var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
                .AddJsonFile("../App.Web/config.json"); // path to your original configuration in Web project

            Configuration = builder.Build();
        }

        public IConfiguration Configuration { get; set; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
        }
    }
}

Modificare il project.json in App.DataAccess ( App.DataAccess/project.json ):

{
  "version": "1.0.0-*",
  "description": "App.DataAccess Class Library",
  "authors": [ "Author" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",
  "frameworks": {
    "dnx451": { }
  },

  "dependencies": {
    "EntityFramework.Commands": "7.0.0-beta7",
    "Microsoft.Framework.Configuration.Json": "1.0.0-beta7",
  },

  "commands": {
    "ef": "EntityFramework.Commands" // this line is important, it will give you access to 'dnx ef' in command line
  }
}

Tutto quello che devi fare è andare su App.DataAccess e usare dnx ef :

cd App.DataAccess
dnx ef migrations add NewMigration
dnx ef migrations remove
dnx ef database update
dnx ef ...



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché