엔티티 프레임 워크 이주에서 테이블을 채우십시오
-
21-12-2019 - |
문제
내 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");
}
}
.
패키지 관리자 콘솔에서 내 시스템에서 올바르게 작동합니다.그러나 전체 개발 팀이 쉽게 사용할 수 있도록 파일의 상대 경로를 사용하고 싶습니다.
파일 이름을 단순히 썼을 때 업데이트가 실패했습니다.현재 디렉토리를 파일 이름으로 연결하여 현재 디렉토리가 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 # / p>에서 소스 파일 이름과 LineNumber를 인쇄하십시오.
제휴하지 않습니다 StackOverflow