Question

Un de mes EF migrations crée une table et dans le cadre de la migration Up méthode que je voudrais remplir ce tableau avec les données initiales.

Voici ma classe de migration:

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

Cela fonctionne correctement sur ma machine depuis le Gestionnaire de paquets de la Console.Cependant, je voudrais utiliser un chemin relatif pour le fichier, de sorte que l'ensemble de l'équipe de développement peuvent utiliser facilement.

Quand j'ai simplement écrit le nom de fichier de la mise à jour a échoué.Quand j'ai essayé la concaténation du répertoire courant pour le nom de fichier, j'ai vu que le répertoire courant est c:\windows\system32.

Comment puis-je faire la mise à jour du projet ou de la solution d'annuaire?

Sinon, est-il une meilleure façon de remplir la table lors d'une mise à jour?Je ne veux pas utiliser le Seed méthode car il ne fait pas exactement ce que je veux.Par exemple, il n'y a qu'un seul Seed la méthode alors que je veux écrire un code différent pour les différentes migrations.

Était-ce utile?

La solution

En tant que solution de contournement vous pouvez obtenir le chemin d'accès à la source de courant de fichier puis d'entrer à chemin relatif du fichier CSV avec les données.

Sens au lieu de:

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

Avoir quelque chose comme:

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

Voici quelques exemples de comment faire exactement pour avoir accès à la source du fichier chemin d'accès - Imprimer le nom du fichier source et linenumber en C#.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top