Domanda

Una delle mie migrazioni EF crea una tabella e come parte del metodo di migrazione Up vorrei riempire questa tabella con i dati iniziali.

Ecco la mia classe di migrazione:

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

funziona correttamente sulla mia macchina dalla console Gestione pacchetti.Tuttavia vorrei usare un percorso relativo per il file in modo che l'intero team di sviluppo possa usarlo facilmente.

Quando ho semplicemente scritto il nome del file, l'aggiornamento non è riuscito.Quando ho provato a concatenare la directory corrente al nome del file che ho visto che la directory corrente era C: \ Windows \ System32.

Come posso apportare l'aggiornamento dal progetto o dalla directory della soluzione?

In alternativa, c'è un modo migliore per riempire la tabella durante un aggiornamento?Non voglio usare il metodo Seed perché non fa esattamente quello che voglio.Ad esempio, c'è solo un singolo metodo Seed mentre voglio scrivere un codice diverso per diverse migrazioni.

È stato utile?

Soluzione

Come Workaround È possibile ottenere il percorso del file di origine corrente e quindi per accedere al percorso relativo del file CSV con i dati.

significato invece di:

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

Avere qualcosa di simile:

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

Qui ci sono alcuni esempi di come ottenere esattamente l'accesso al percorso del file sorgente - Stampa il nome del file di origine e linoumber in C # .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top