实体框架核心种子更新

时间:2017-12-05 20:49:44

标签: c# entity-framework entity-framework-core ef-core-2.0

我是Ef Core的新手。尝试在迁移更新时播种数据。

他就是这样做的

首先创建了一个初始化类:

using AcademicNet.Data.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AcademicNet.Data
{
public class PersonInitializer
{
    private AcademicPortalContext _context;

    public PersonInitializer(AcademicPortalContext context)
    {
        _context = context;
    }



    public async Task Seed()
    {
        if(!_context.PersonCategoryStatuses.Any())
        {
            _context.AddRange(_personCategoryStatus);
            await _context.SaveChangesAsync();
        }

        if (!_context.PersonCategories.Any())
        {
            _context.AddRange(_personCategory);
            await _context.SaveChangesAsync();
        }

        if (!_context.People.Any())
        {
            _context.AddRange(_people);
            await _context.SaveChangesAsync();
        }
    }

    List<PersonCategory> _personCategory = new List<PersonCategory>
    {
        new PersonCategory()
        {
            Name = "Internal Person Category",
            Description = "Silahkan diganti redaksi ini",
            PersonCategoryStatusId = 2,
            StartDate = DateTime.UtcNow,
            ModifiedDate = DateTime.UtcNow
        }
    };

    List<Person> _people = new List<Person>
    {
        new Person()
        {
            FirstName = "Jannen",
            LastName = "Siahaan",
            Email = "j.siahaan@any.com",
            DateAdd = DateTime.UtcNow,
            ModifiedDate = DateTime.UtcNow
        }
    };

    List<PersonCategoryStatus> _personCategoryStatus = new List<PersonCategoryStatus>
    {
        new PersonCategoryStatus()
        {
            Status = "Baru"
        },
        new PersonCategoryStatus()
        {
            Status = "Valid"
        },
        new PersonCategoryStatus()
        {
            Status = "Expired"
        }
    };
}
}

2。在Startup.cs中的ConfigurationServices中添加:

services.AddTransient<PersonInitializer>();
  1. 在Startup.cs的Configure方法参数中添加以下注入:
  2. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, PersonInitializer personSeeder, AcademicPortalIdentityInitializer identitySeeder) 4.在app.UseMvc()

    之后的“public void Configure”结束时

    personSeeder.Seed().Wait();

    假设我已经运行了迁移

    并希望稍后将新的PersonCategoryStatus添加为'inValid'。我怎么能实现这个目标。

    new PersonCategoryStatus
    List<PersonCategoryStatus> _personCategoryStatus = new List<PersonCategoryStatus>
        {
            new PersonCategoryStatus()
            {
                Status = "Baru"
            },
            new PersonCategoryStatus()
            {
                Status = "Valid"
            },
            new PersonCategoryStatus()
            {
                Status = "Expired"
            },
            new PersonCategoryStatus()
            {
                Status = "Invalid"
            }
        };
    

    非常感谢任何帮助。提前致谢

1 个答案:

答案 0 :(得分:0)

在Seed()身上而不是:

if(!_context.PersonCategoryStatuses.Any())

您应该遍历 _personCategoryStatus 集合并针对每种可能的状态执行upsert操作。