2014-02-10 7 views
1

나는이 모델이어떻게 TPT 매핑에 엔티티 프레임 워크에 종속 테이블을 업데이트 할

public class Context : DbContext 
{ 
    public Context() 
     : base("Context") 
    { 
     Database.SetInitializer<Context>(null); 
    } 

    public DbSet<Student> Students { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Person>().ToTable("People"); 
     modelBuilder.Entity<Student>().ToTable("Students"); 
    } 
} 

을 그리고없이 Student의 인스턴스를 삽입 할 수 있도록하려면 코드를 먼저 작성한 다음 나중에 나중에 Student의 코드를 업데이트하려고합니다. FirstNameLastName이 제공되어야하고, null이 될 수 없다는

var student = new Student 
{ 
    FirstName = "Saeed", 
    LastName = "Nemati", 
}; 
using (var context = new Context()) 
{ 
    context.Students.Add(student); 
    context.SaveChanges(); 
} 

// A month later I want to update the code 
var student2 = new Student 
{ 
    Id = student.Id, 
    Code = "something" 
}; 
using (var context = new Context()) 
{ 
    context.Students.Attach(student2); 
    context.Entry(student2).State = EntityState.Modified; 
    context.SaveChanges(); 
} 

문제는, EF 불만 : 다음은 간단한 코드에 대한 설명입니다. Person 속성에서 Student 상속 된 속성을 채울 수 있지만 냄새가 난다. 독창적 인 방법으로 파생 클래스 (종속 테이블)를 업데이트하기위한 EF의 접근법이나 기법이 있습니까?

답변

3

이것은 당신이 상태 student2 엔티티 프레임 워크는 FirstNameLastName가 null 인 생각 수정 simple.When입니다. 대신 사용 :

context.Entry(student2).State = EntityState.Modified; 

당신은 Property을 변경해야합니다 :

context.Entry(student2).Property(x => x.Code).IsModified = true; 
+0

좋은 해결책입니다. –

2

이 시도 :

using (var context = new Context()) 
{ 
    var student2 = context.Students.SingleOrDefault(x=>x.Id == yourID); 

    student2.Code = "Something"; 

    context.Students.Attach(student2); 
    context.Entry(student2).State = EntityState.Modified; 
    context.SaveChanges(); 
} 
+0

좋은 솔루션 @BappiDatta을. 그러나 파생 클래스가 20 개가 넘는 속성을 가진다면 어떨까요? 이 경우 데이터베이스에서 가져온 'Student'의 속성을 복사하여 대상 'Student'에 붙여 넣어야합니다. –