sql - Generating seed code from existing database in ASP.NET MVC -
i wondered if has encountered similar challenge:
i have database data etl'ed (imported , transformed) in there excel file. in asp.net mvc web application i'm using code first approach , dropping/creating every time database changes:
#if debug database.setinitializer(new dropcreatedatabaseifmodelchanges<mydatacontext>()); #endif however, since data in database lost, have etl again, annoying.
since, db dropped on model change, have tweak etl anyway, know that. i'd rather change db seed code.
does know how take contents of database , generate seed code, assuming both models , sql tables date?
edit 1: i'm planning use auto-generated configuration.cs, , seed method, , use addorupdate() method add data database: here microsoft's tutorial on migrations (specifically "set seed method" section).
another way of seeding data run sql in migration.
i have code read sql file , run it
using system; using system.data.entity.migrations; using system.io; public partial class insertstandingdata : dbmigration { public override void up() { var basedir = appdomain.currentdomain .basedirectory .replace("\\bin", string.empty) + "\\data\\sql scripts"; sql(file.readalltext(basedir + "\\standingdata.sql")); } public override void down() { //add delete sql here } } so if etl generates sql use technique.
the advantages of doing in method
- it quicker doing using
addorupdatebecauseaddorupdatequeries database each time called existing entity. - you going known state (e.g. empty tables) don't need check whether data exists already. nb ensure should delete data in
downmethod can tear way down , again. - the method not run every time application starts.
the seed method provides convenience - , has advantage (!?) runs every time application starts
but if prefer run sql there use executesqlcommand instead of sql:
string basedir = appdomain.currentdomain.basedirectory.replace("\\bin", string.empty) + "\\data\\sql scripts"; string path = path.combine(basedir, "standingdata"); foreach (string file in directory.getfiles(path, "*.sql")) { context.database.executesqlcommand(file.readalltext(file)); } references:
Comments
Post a Comment