1

我是 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 方法的参数处添加此注入:

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"
        }
    };

任何帮助深表感谢。提前致谢

4

1 回答 1

0

在 Seed() 正文而不是这个:

if(!_context.PersonCategoryStatuses.Any())

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

于 2018-02-19T14:40:27.760 回答