Frage

Bei einer meiner EF-Migrationen wird im Rahmen der Migration eine Tabelle erstellt Up Methode Ich möchte diese Tabelle mit Ausgangsdaten füllen.

Hier ist mein Migrationskurs:

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

Dies funktioniert auf meinem Computer über die Paket-Manager-Konsole ordnungsgemäß.Allerdings würde ich gerne einen relativen Pfad für die Datei verwenden, damit das gesamte Entwicklungsteam diesen problemlos verwenden kann.

Als ich einfach den Dateinamen schrieb, schlug das Update fehl.Als ich versuchte, das aktuelle Verzeichnis mit dem Dateinamen zu verknüpfen, sah ich, dass das aktuelle Verzeichnis c:\windows\system32 war.

Wie kann ich das Update aus dem Projekt- oder Projektmappenverzeichnis ausführen lassen?

Gibt es alternativ eine bessere Möglichkeit, die Tabelle während eines Updates zu füllen?Ich möchte das nicht verwenden Seed Methode, weil sie nicht genau das macht, was ich will.Es gibt zum Beispiel nur eine einzige Seed Methode, während ich unterschiedlichen Code für verschiedene Migrationen schreiben möchte.

War es hilfreich?

Lösung

Als ein Problemumgehung Sie können den Pfad zur aktuellen Quelldatei abrufen und dann den relativen Pfad der CSV-Datei mit Daten eingeben.

Bedeutung statt:

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

Habe so etwas wie:

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

Hier sind einige Beispiele dafür, wie Sie genau Zugriff auf den Quelldateipfad erhalten: Geben Sie den Quelldateinamen und die Zeilennummer in C# aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top