EntityFramework 7プロジェクトへの移行を追加する方法

asp.net-core code-first-migrations entity-framework entity-framework-core

質問

私はasp.net 5とEF 7 VS2015を使って新しいプロジェクトを開始しています。

私は、ユーザー管理を使ってプロジェクトテンプレートを選択しました。今度は、いくつかのクラスをdbContextに追加し、新しいクラスで新しいスキーマを作成したいと思います。

これは私のApplicationDbContextのようなものです:

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public DbSet<Candidate> Candidates { get; set; }
    public DbSet<Manager> Managers { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
        builder.Entity<Candidate>().Key(x => x.Id);
        builder.Entity<Manager>().Key(x => x.Id);
    }
}

私は私のデータベースを私のCandidatesManagersテーブルを持つバージョンに再作成またはマイグレーションできませんでした。

どのコマンドを入力すればDBをどこに表示する必要がありますか?私の友人のGoogleとBingは私をあらゆる方向に向けて指摘しましたが、私が見つけたものはどれも働いていませんでした。

受け入れられた回答

たとえば、 dnxように新しいdnxコマンドを使用する必要があります。

dnx . ef migration add NameOfMigration

そして移行を実行するには:

dnx . ef migration apply

人気のある回答

ASP.NET 5およびEntity 7 RC1の手順は次のとおりです。

  1. メインプロジェクトのEntity Commands nugetパッケージに依存関係を追加します。したがって、あなたのproject.jsonでは、この依存関係"EntityFramework.Commands": "7.0.0-rc1-final"が表示されます"EntityFramework.Commands": "7.0.0-rc1-final"
  2. 後でコンソールから使用するエイリアスコマンドを追加します。したがって、あなたのproject.jsonには、以下のefコマンドがあります: "commands": { "ef": "EntityFramework.Commands", "web": "Microsoft.AspNet.Server.Kestrel" }
  3. コンソールを開き、移行コマンドを実行します。例えば:

    D:\Projects\MyProject\src\MyProject.Web.Api>dnx ef migrations add Initial --targetProject MyProject.Data.SqlServer

  4. 次に、 efがプロジェクトで作成する移行を確認し、次のコマンドを使用してデータベースに変更を適用します(プロジェクト用に構成されたデータベース)。

    D:\Projects\MyProject\src\MyProject.Web.Api>dnx ef database update

--targetProject属性を使用すると、DbContextがどこにあるプロジェクト、および移行フォルダが作成されるかを指定できます。 DbContextがあなたのメインプロジェクトにある場合、それを省略することができます(ただし、このコマンドは便利なので、すべての永続性についてクラスライブラリプロジェクトを持つことをお勧めします)

あなたのStartup.csは通常、接続文字列を含むEntityの設定があります。これは基本的な例です:

public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; private set; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<KuneDbContext>(options => {
                options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]);
            });

        // Add identity here http://docs.asp.net/en/latest/tutorials/your-first-aspnet-application.html

        services.AddMvc();

        // Add application services
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");

            // For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
            try
            {
                using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
                    .CreateScope())
                {
                    serviceScope.ServiceProvider.GetService<KuneDbContext>()
                         .Database.Migrate();
                }
            }
            catch { }
        }

        app.UseIISPlatformHandler();

        app.UseStaticFiles();
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        //Seed Data if you want to load some test data in the DB
        //SeedData.Initialize(app.ApplicationServices);
    }

    // Entry point for the application.
    public static void Main(string[] args) => WebApplication.Run<Startup>(args);
}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ