2012-05-09 3 views
3

(시드) 어떻게 Entity Framework에서 많은 정적 데이터를 만들 수 있습니까? 정적 데이터 란 데이터베이스에있는 데이터를 의미하지만 한 번만 존재합니다.Entity Framework를 사용하여 정적 데이터로 데이터베이스를 시드하는 방법은 무엇입니까?

예를 들어 내 데이터베이스에는 전 세계의 모든 국가를 포함하는 CountrySet가 있습니다. 저는이 국가들이 항상 존재하기를 바랍니다. 그러나 사실은 데이터베이스를 제거하고 새로운 배포를 위해 데이터베이스를 다시 만들 때마다 모든 데이터가 손실된다는 것입니다.

내 응용 프로그램이 시작될 때 모두 만들기 (아직 만들어지지 않은 경우)에는 시간이 많이 걸리는 것처럼 보입니다.

여기서 어떻게 할 수 있습니까? 모든

답변

4

첫째, 내가이 물어 보자 :

당신이 당신이 당신의 자신의 Initializer을 설정하는 경우에 대한 액세스 권한을 얻는 Seed 기능에 대해 잘 알고 있습니까?

예 :이처럼 주요 기능 쓰기 뭔가에

:

System.Data.Entity.Database.SetInitializer(new SystemContext.SystemInitializer()); 

SystemContextDbContext 클래스입니다.

그리고 그 클래스에서 당신은 같은 것을해야한다 : 나는 주위에 거짓말을 한 프로젝트에서 그냥 템플릿 코드의

public class SystemContext : DbContext 
    { 
     public DbSet<Stock> Stocks { get; set; } 
     public DbSet<RawDayValues> StockRawValues { get; set; } 

     public SystemContext() 
      : base("Server=localhost;Database=test;Trusted_Connection=True;") 
     { } 

     public class SystemInitializer : DropCreateDatabaseIfModelChanges<SystemContext> 
     { 
      #region SEED 
      // This is what you're looking for! 
      protected override void Seed(SystemContext context) 
      { 
       try 
       { 
        var stock = new Stock() { Symbol = "TEST" }; 
        context.Stocks.Add(stock); 
        context.SaveChanges(); 
       } 
       catch (Exception ex) { Console.Error.WriteLine(ex.Message); } 
       base.Seed(context); 
      } 

      #endregion 
     } 
    } 

합니다.

매번 데이터베이스를 재생성하는 경우 모든 데이터를 "수동으로"추가하지 않고 데이터베이스를 "시드"하는 다른 방법을 모릅니다. 데이터베이스 당신이 그것의 세부 사항을 변경할 때마다을 삭제 아닌 다른 일을 계획하는 경우에, 다른 한편으로

는, 당신은 따라 모든 새로운 데이터를 지우 수동으로 쓰기 기능이있을 수 있습니다 어떤 논리에.

나는이 질문 : ALSO

답변이 되었기를 바랍니다 : 당신은 질문이나 당신에 대해 얘기하고 기술 태그를 사용하여도 지정하지 않았습니다. 나는 그것이 , 이라고 가정했습니다. 그렇지 않은 경우 다시 태그 지정/지정하십시오.

당신은 예컨대, 컨텍스트에 대한 초기화를 설정할 수 있습니다 좋은 하루를 :)

+0

+1 a-z 설명으로 답변을 보려면 반갑습니다! –

1

유무 : 'MyInitializer'는 IDatabaseInitializer<MyContext> 인터페이스를 상속하는 클래스입니다

System.Data.Entity.Database.SetInitializer<MyContext>(new MyInitializer());

. 이 인터페이스는 InitializeDatabase(TContext context) 메서드를 가지고 있으며이 메서드는 데이터베이스가 (다시) 생성 될 때마다 호출됩니다.

이 방법에서는 db를 채우려는 모든 수단을 사용할 수 있습니다.

관련 문제