簡體   English   中英

實體框架遷移中的填充表

[英]Fill table in Entity Framework Migration

我的EF遷移之一創建了一個表,作為Up遷移方法的一部分,我想用初始數據填充該表。

這是我的遷移課程:

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

這可以從Package Manager控制台在我的機器上正常運行。 但是,我想為文件使用相對路徑,以便整個開發團隊都可以輕松使用它。

當我簡單地寫文件名時,更新失敗。 當我嘗試將當前目錄連接到文件名時,我看到當前目錄為c:\\ windows \\ system32。

如何使更新從項目或解決方案目錄運行?

或者,是否有更好的方法在更新期間填寫表格? 我不想使用Seed方法,因為它不能完全滿足我的要求。 例如,只有一個Seed方法,而我想為不同的遷移編寫不同的代碼。

解決方法是,您可以獲取當前源文件的路徑,然后輸入包含數據的CSV文件的相對路徑。

含義代替:

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

有類似的東西:

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

以下是一些有關如何精確訪問源文件路徑的示例- 在C#中打印源文件名和行號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM