2011-04-19 2 views
2

하나의 하위 클래스가있는 상위 클래스가있는 상황에서 엔티티 매핑에 가장 적합한 패턴은 무엇입니까?Entity Framework 4.1 RTW 코드 우선 - POCO 일대일 개체는 하위 엔터티 및 하위 엔터티 기본 키를 참조해야합니까?

나는 부모가 자식 클래스와 자식 클래스 ID에 대한 참조를 가지고있는 많은 제안을 보았다. 예 : 아이를 다른 의 아이를 교체하려는 경우, 부모를 저장하지만, 기존 때이 패턴에서

public class Parent { public int Id { get; set; } public int ChildId { get; set; } public virtual Child Child { get; set; } } public class Child { public int Id { get; set; } } public class ParentMapping : EntityTypeConfiguration<Parent> { public ParentMapping() { HasKey(x => x.Id); HasRequired(X => x.Child) .WithMany() .Map(x => x.ToTable("Parent") .MapKey("ChildId")); } } 

, 예를 들면 난 그냥 잘못 느끼는 ChildId 아니라 아동 업데이트 본 것 때문에 개체가 자체와 동기화되지 않습니다.

ChildId가 없으면 코드가 더 깔끔하게 보이지만이 패턴을 사용하면 EF가 새로운 자식을 저장하려고하기 때문에 기존 자식을 사용하여 부모를 저장하는 데 문제가 있습니다.

public class Parent 
{ 
    public int Id 
    { 
     get; 
     set; 
    } 

    public virtual Child Child 
    { 
     get; 
     set; 
    } 
} 

최고의 패턴이 무엇인가, 내가 동기화 유지 아동 속성이며 데이터베이스 여부에서로드 게으른 것 다음 방법은 ChildId가 필요한지 알고 싶습니다.

답변

3

이것은 foreign key and independent association의 차이점입니다. 외래 키 연관을 사용할 때 관련 객체를 로딩하지 않고 단지 키를 사용할 수 있습니다. 로드 된 경우 참조가 동기화되지 않습니다. 항상 그런 것은 아닙니다. 참조를 동기화 상태로 유지하려면 거의 독립적 인 관계로 해결해야하는 상황에 처해 있습니다.

외래 키를 노출하는 경우 많은 일을 훨씬 쉽게하기 때문에 외래 키를 사용해야합니다. 독립적 인 협회를 사용하는 경우 다음과 같이해야합니다.

var parent = GetUpdatedParentSomehow(); 
// Dummy object for the old child if the relation is not loaded 
parent.Child = new Child { Id = oldChildId }; 
// Attach the parent 
context.Parents.Attach(parent); 

// Create dummy for new child (you can also load a child from DB) 
var child = new Child { ID = newChildId }; 
// No attach the child to the context so the context 
// doesn't track it as a new child 
context.Childs.Attach(child); 
// Set a new child 
parent.Child = child; 
// Set parent as modified 
context.Entry(parent).State = EntityState.Modified; 
context.SaveChanges(); 

나는 늙은 아이를위한 더미를 만드는 아주 이상한 부분이 있습니다. 나는 부모를 붙이고 새로운 자식을 설정하기 전에 그것을하지 않으면 변화를 저장하는 동안 (독립된 연합의 경우) 약간의 예외가 생길 것이라고 거의 확신한다.

관련 문제