이 문제에 대해 몇 시간을 보냈습니다. 일반적인 요구 사항으로 볼 수 있으므로 나중에 간단하게 처리하고 싶습니다.ID 컬렉션을 사용하여 컬렉션 인 탐색 속성을 설정하는 방법
public abstract class ModelBase
{
public int ID { get; set; }
}
은 이제부터 답변 모음을 설정하려면 :
public class AnsweredQuestion : ModelBase
{
public virtual ICollection<Answer> Answers { get; set; }
}
내 모든 모델은 하나의 기본 클래스를 상속 :
나는 모음입니다 탐색 속성으로 질문 클래스가 응답 아이디 컬렉션 및 컨트롤러에서이 메서드가 있습니다 - 작동하지 않습니다.
private void SetAnswers(AnsweredQuestion question,
IEnumerable<int> newAnswerIDs)
{
//First remove any answers we don't want
question.Answers.RemoveAll(a => !newAnswerIDs.Contains(a.ID));
//Then project the current ids
IEnumerable<int> currentAnswerIds = question.Answers.Select(a => a.ID);
//Now go to the database to get the answers that match the ids that
//we have to add
IQueryable<Answer> answersToAdd = _uow.AnswerRepository.All
.Where(dbAnswers => newAnswerIDs.Contains(dbAnswers.ID)
&&
!currentAnswerIds.Contains(dbAnswers.ID));
//and add them to the navigation property
question.Answers.AddRange(answersToAdd);
}
하지만이 코드는 매우 복잡하며 탐색 속성이있는 각 모델에서이 코드를 반복해서 작성해야한다는 것을 알 수 있습니다.
1 대 다수의 관계인 경우 내 엔티티에 Answer 속성과 AnswerID 속성이있어 프레임 워크가이 문제를 해결할 수 있습니다. 그러나, 내가 아는 한, 많은 관계에서 그렇게 할 수는 없습니다.
누구나 모델의 탐색 속성에서 호출 할 수있는 방법으로 바꾸는 방법을 생각할 수 있습니까? 모델 모음에서 확장 메서드를 만드는 방법에 대해 생각했지만 문제는 데이터베이스에 연결하여 Answers 컬렉션에 추가하기 전에 내가 가진 ID와 일치하는 Answers를 가져와야한다는 것입니다. 확장 방법은
여기