0

最近、データベースを削除して再作成できないように、DB 権限を減らしました。これにより、ナゲットから DontDropDbJustCreateTablesIfModelChanged データベースの初期化を使用することになりました。

ただし、シード関数が初期化されていないため、データをシードする方法については行き詰まっているため、オーバーライドできません。これが私ができるようになりたいことです。

public class MyDBInitialiser : DontDropDbJustCreateTablesIfModelChanged<MyContext>
{
    protected override void Seed(MyContext context)
    {
        base.Seed(context);

        context.Item.Add(new Item() { ItemId = 1, Name = "Item 1"});
        context.Item.Add(new Item() { ItemId = 2, Name = "Item 2"});
        context.Item.Add(new Item() { ItemId = 3, Name = "Item 3"});
    }
}

この状況でデータをシードする別の方法はありますか。

4

2 に答える 2

0

私のプロジェクトでは、db初期化をdbシードから分割しました。制御の反転を使用する場合は、コンポジションルートで次のようなことができるはずです(WebアプリからDbContextを使用している場合はApplication_Start)。

var seeder = ServiceLocatorPattern
    .ServiceProviderLocator.Current.GetService<ISeedDb>();
if (seeder != null) seeder.Seed();

インターフェース:

public interface ISeedDb, IDisposable
{
    void Seed();
}

可能な実装:

public class MyDbSeeder : ISeedDb
{
    private readonly MyContext _context;

    public MyDbSeeder(MyContext context)
    {
        _context = context;
    }

    public void Seed()
    {
        _context.Item.Add(new Item { ItemId = 1, Name = "Item 1" });
        // ... etc
    }

    public void Dispose()
    {
        _context.Dispose();
    }
}
于 2012-07-25T12:57:49.500 に答える