그래서 MVC3과 EF4를 배우고 있습니다. 코드 첫 번째 방법을 시도했지만 너무 혼란 스러웠습니다. 클래스를 아무 문제없이 만들 수 있지만 외래 키 및 서로 간의 관계를 처리 할 때는 어려운 부분이 있습니다.Model First 접근법을 사용할 때 데이터를 시드하는 방법은 무엇입니까?
하지만 먼저 모델을 살펴 보았습니다. 이렇게하면 시각적으로 디자인하고 관계가 어디에 있는지 알 수 있습니다.
내 모델을 만든 후에 SQL Express 데이터베이스에 대해 실행하는 SQL을 만듭니다. 완료하고 완료하십시오.
이제 테이블에 데이터가 필요합니다. 물론 서버 탐색기를 사용하여 추가 할 수는 있지만 대부분의 경우 모델을 변경하게 될 것입니다. 그리고 데이터베이스를 계속 업데이트하십시오. 따라서 수동으로 데이터를 입력 할 수 없습니다. 코드를 먼저 사용하면 DropCreateDatabaseIfModelChanges
을 파생시키고 seed
메서드를 재정의 할 수 있습니다.
그러나 모델 첫 번째 방법으로 어떻게해야합니까? 그래서 지금 무엇을
protected void Application_Start()
{
Database.SetInitializer<BettingContext>(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
:
public class DatabaseInitializer : IDatabaseInitializer<BettingContext> {
public void InitializeDatabase(BettingContext context) {
var teams = new List<Team> {
new Team { Name="Toronto Maple Leafs", League="NHL"},
new Team { Name="Boston Bruins", League="NHL"},
new Team { Name="Vancouver Canucks", League="NHL"},
new Team { Name="Nashville Predators", League="NHL"},
new Team { Name="Montreal Canadiens", League="NHL"},
};
}
}
물론
내 글로벌 파일 : 나는 다음과 같은 코드가? 메소드를 실행하려면 어떻게해야합니까? 내가 도대체 뭘 잘못하고있는 겁니까? 당신이 (첫 번째 클래스 모델을 사용하여) DbSets을 만드는 시도 할 수 있습니다, 귀하의 경우에는
Database.SetInitializer(new MySeedData());
수동으로 : 다음
public class MySeedData : DropCreateDatabaseIfModelChanges<YourDataBaseContextClass>
{
protected override void Seed(YourDataBaseContextClass context)
{
// Create objects here and add them to your context DBSets...
}
}
public class YourDataBaseContextClass : DbContext
{
}
, Application_Start()
이내에 전화 :
코드 우선 대신 모델 첫 번째 방법을 사용해도이 작업을 수행 할 수 있습니까? – masfenix
@masfenix : 아마도 ... –
이것은 전혀 작동하지 않습니다. ( – masfenix