2017-03-24 1 views
0

MySQL 데이터베이스에 테이블 속성이 있으며 일부 기본값으로 고정 된 레코드가 있어야합니다. 나는 그 테이블이 Entity Framework의 첫 번째 approch 코드에서 마이그레이션의 도움으로 채워지길 원합니다. 나는 처음으로 이주를 다루기 때문에 같은 도움을 원한다.데이터베이스 마이그레이션을 사용하면 엔티티 프레임 워크를 사용하여 특정 테이블에 고정 레코드를 삽입 할 수 있습니다.

public override void Up() 
     { 
      CreateTable(
       "dbo.properties", 
       c => new 
        { 
         id = c.Int(nullable: false, identity: true), 
         property_name = c.Int(nullable: false), 
         value = c.String(nullable: false, maxLength: 255, storeType: "nvarchar"), 
         type = c.Int(nullable: false), 
        }) 
       .PrimaryKey(t => t.id) 
       .Index(t => t.property_name, unique: true, name: "uk_property_name"); 

     } 

     public override void Down() 
     { 
      DropIndex("dbo.properties", "uk_property_name"); 
      DropTable("dbo.properties"); 
     } 

답변

0

마이그레이션 데이터를 채울 Seeding Mechanism을 다음과 같이

나의 현재 이동이다. 이 방법은 update-database 때마다 실행되므로 데이터가 여러 번 삽입되지 않도록해야합니다.

if (!context.MyTable.Any(t => t.Id == "seedId") { // insert }; 

하지만 당신의 시나리오에서 AddOrUpdate와 함께 갈 것입니다 : 보낸 사람이

protected override void Seed(MyContext context) 
{ 
    context.Properties.AddOrUpdate(x => x.Value, 
     new Property() { Value = "My Prop Name 1", Property_Name = 1, Type = 1 }, 
     new Property() { Value = "My Prop Name 2", Property_Name = 2, Type = 2 }, 
     new Property() { Value = "My Prop Name 3", Property_Name = 3, Type = 1 } 
     ); 
} 

참고이 더 복잡한 상황에서 그냥 표준 LINQ를 사용할 수 있지만 AddOrUpdate 명령을,위한 것입니다 귀하의 ID 필드는 ID입니다. 나는 그것을 포함하지 않지만, Value를 사용하여 이미 존재하는지 확인합니다. 값을 복제 할 수 있거나 ID를 제어해야하는 경우 this과 같은 다른 기술이 필요할 수 있습니다.

관련 문제