[英]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.