0

내 경우에는 aspnet mvc modelbinder에서 새로운 POCO가 분리되었습니다.새로운 연결이 끊긴 엔터티의 기존 탐색 속성로드

public class OfflineEntry 
{ 
    public virtual int Id { get; set; } 
    public virtual Category Category { get; set; } 
    public virtual int CategoryId { get; set; } 
} 

외래 키 속성 (CategoryId)는 기존의 데이터베이스의 값으로 설정되지만, 탐색 기준 (Category)는 우선 널. 탐색 참조를로드하는 올바른 방법은 무엇입니까? 첫 번째 단계는 새 객체를 컨텍스트에 추가하는 것입니다. 그런 다음 SaveChanges 전에 게으른 로딩 또는 LoadProperty을 사용할 수 있습니까? 아니면 수동으로 설정해야합니까?

public ContentResult Save(OfflineEntry o) 
{ 
    db.OfflineEntries.Add(o); 
    var categoryName = o.Category.Name; //? 
    db.SaveChanges(); 
    return Content("ok"); 
} 

public class Category 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    //optional 2-way nav property 
} 
+0

나는 의회 처리가이 경우에 나쁜 선택이었다 '생각 .NET에서 이미 기존 유형이므로 - 대신 OfflineEntryAction이어야합니다. 대신 '카테고리'로 수정되었습니다. – Benjamin

+0

처음에는 혼란 스러웠습니다. –

+0

@Chris too bad stackoverflow에 인텔리 센스가 없습니다. – Benjamin

답변

2

'LazyLoading ISN 따라서 나는 다른 사람이 전문가입니다 사람이 뛰어 것이라고 기대했다,하지만 난 당신이해야 할거야 참조 하나의 문제는 OfflineEntry의 인스턴스가 당신의 DbContext에서 생성되지 않도록하고, 일하러 갈거야.

일반적으로 엔티티 모델을 뷰 모델로 사용하지 않는 것이 더 나은 방법입니다. 이것이 이유 중 하나입니다.

그래서 내 제안은 NewOfflineEntryViewModel 아래와 같이 작성하는 것입니다 :

public class NewOfflineEntryViewModel 
{ 
    public int CategoryId { get; set; } 
} 

을 다음 DbContext에서 카테고리를 검색 수동

public ContentResult Save(NewOfflineEntryViewModel model) 
{ 
    var category = db.Categories.Find(model.CategoryId); 

    var newEntry = db.OfflineEntries.Create(); 
    db.OfflineEntries.Add(newEntry); 
    newEntry.Category = category; 

    db.SaveChanges(); 

    var categoryName = category.Name; //for whatever you needed with this 

    return Content("ok"); 
} 
+0

프록시가 없으므로 게으른로드가 아닐 것입니다. 나는 뷰 모델에 동의한다. 나는 automapper를 배우고 통합 할 시간을 벌려고 노력하고있다. – Benjamin