다음 모델이 있다고 가정합니다.여러 외래 키 데이터 모델이 C# mvc 컨텍스트를 사용하여 EF에서 업데이트 됨
public class modelA
{
[Key]
public int ID {get; set;}
public string Name {get; set;}
}
public class modelB
{
[key]
public int ID {get; set;}
public string Name {get; set;}
public modelA modelAID {get; set;}
}
public class modelC
{
[key]
public int ID {get; set;}
public string Name {get; set;}
public modelA modelAID {get; set;}
public modelB modelBID {get; set;}
}
이제 modelC를 삽입하는 컨트롤러 동작이 있습니다.
public ActionResult addModelC()
{
modelA dbModelA = db.modelAs.FirstOrDefault();
modelB dbModelB = db.modelBs.FirstOrDefault();
modelC newModelC = new modelC();
newModelC.Name = "New Model C";
newModelC.modelAID = dbModelA;
newModelC.modelBID = dbModelB;
db.modelCs.Add(newModelC);
db.SaveChanges(); //DbEntityValidation error on dbModelB.modelAID empty because its not included when db.modelBs query was called
}
나는() saveChanges를 새로운 기록을 만들려고합니다 db.modelBs EF의 열망로드 modelAID을 해달라고합니다. 이것을 막는 방법?
modelC
을 어떻게 추가 할 수 있습니까? (열렬한로드) modelA 및 modelB. 외래 키 관계 만 추가하면됩니다. 여기 SaveChanges 또한 modelA 및 modelB 업데이트하려고하지만 그 업데이트 싶지 않아요. 나는 EF가 모든 것을 알아야 할 필요가 있음을 압니다. 그러나 대대적 인 기록으로 열심히로드하는 것은 기억 문제를 일으킬 수 있습니다.
db.modelCs.include(i=>i.modelAID).include(i=>i.modelBID).ToList();
modelAID modelBID를 내부 조인 할 필요가 없다면. 모델 C 만 보여줍니다.
또한 modelC를 JSON 객체로 반환하는 경우 모델 B에서 modelAID를 반복하고 모델 C에서 하나를 반복하기 때문에 원형 참조가 발견됩니다. 나는 그것을 분명히하기를 희망한다.
참고 : 코드를 처음 사용하는 방법. [메모리에서]
외래 키는 일반적으로 '가상'키워드를 사용하여 생성됩니다. 귀하의 예제에서, 나는 당신이 사용해야합니다 용의자 :'public virtual modelA modelAID {get; 세트; }' – peval27
가상을 사용하면 지연로드가 시작됩니다. 내가 원하는 것은 관련 객체를로드하지 않는 것입니다. –