Pregunta

Uno de mis EF migraciones se crea una tabla y como parte de la migración Up método me gustaría llenar esta tabla con los datos iniciales.

Aquí está mi la migración de la clase:

public partial class Objects : DbMigration
{
    void Fill(string table, string path, string fieldTerminator = ",", string rowTerminator = @"\n")
    {
        Sql(string.Format("BULK INSERT {0} FROM '{1}' WITH (FIELDTERMINATOR = '{2}', ROWTERMINATOR = '{3}')", table, path, fieldTerminator, rowTerminator));
    }

    public override void Up()
    {
        CreateTable(
            "dbo.Objects",
            c => new
                {
                    ObjectId = c.Int(nullable: false),
                    Name = c.String(),
                    Location_X = c.Double(nullable: false),
                    Location_Y = c.Double(nullable: false),
                    Location_Z = c.Double(nullable: false),
                })
            .PrimaryKey(t => t.ObjectId);

        Fill("dbo.Objects", @"C:\temp\Scratch\Junk\ConsoleApplication3\data\objects.csv");
    }

    public override void Down()
    {
        DropTable("dbo.Objects");
    }
}

Esto funciona correctamente en mi máquina desde la Consola del Administrador de Paquetes.Sin embargo, me gustaría utilizar una ruta de acceso relativa para el archivo, de modo que todo el equipo de desarrollo puede utilizar fácilmente.

Cuando yo simplemente escribí el nombre de archivo de la actualización ha fallado.Cuando traté de concatenar el directorio actual para el nombre de archivo vi que el actual directorio fue c:\windows\system32.

¿Cómo puedo realizar la actualización de ejecución del proyecto o de la solución de directorio?

Alternativamente, hay una manera mejor para llenar la tabla durante una actualización?No quiero usar el Seed método porque no haces lo que yo quiero.Por ejemplo, hay sólo una única Seed método de mientras quiero escribir código diferente para diferentes migraciones.

¿Fue útil?

Solución

Como una solución Puede obtener la ruta al archivo fuente actual y luego ingresar en la ruta relativa del archivo CSV con datos.

Significado en lugar de:

dataFile = @"C:\temp\Scratch\Junk\ConsoleApplication3\data\objects.csv";

tiene algo como:

currentFile = GetSourceFilePath(); // See below hints for implementation
dataFile = Path.Combine(
    Path.GetDirectoryName(currentFile),
    @"..\data\objects.csv"
);

Aquí hay algunos ejemplos de cómo exactamente cómo obtener acceso a la ruta del archivo de origen: Imprima el nombre de archivo fuente y el lino en C # .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top