여러 기존 엔티티와 다른 기존 엔티티 사이의 관계를 추가하고 싶습니다.엔티티 프레임 워크 코드에서 many to many 대다수 관계 추가하기
public void AddFormToTerm(int termId, int formId)
{
var term = termsRepository.GetTerms().FirstOrDefault(t => t.TermId == termId);
var subForms = termsRepository.GetSubForms().Where(t => t.FormId == formId);
//I assume this would work by adding existing forms to an existing term.
foreach (var subForm in subForms)
{
term.SubForms.Add(subForm);
}
termsRepository.UpdateTerm(term, null);
}
: 내 서비스 계층이 전화를 걸 때
이제
public IQueryable<Term> GetTerms()
{
IQueryable<Term> query = db.Terms.AsNoTracking();
return query;
}
public Term UpdateTerm(Term term, IEnumerable<Expression<Func<Term, object>>> properties)
{
if (term.TermId == 0)
{
throw new InvalidOperationException("Term does not exist");
}
db.Terms.Attach(term);
if (properties != null)
{
foreach (var selector in properties)
{
string propertyName = Helpers.PropertyToString(selector.Body);
db.Entry(term).Property(propertyName).IsModified = true;
}
}
db.SaveChanges();
return term;
}
나는 가정이 작동합니다 다음과 같이 내가 갱신 저장소 방법이
public class Term
{
public int TermId { get; set; }
public virtual ICollection<SubForm> SubForms { get; set; }
}
public class SubForm
{
public int SubFormId { get; set; }
public virtual ICollection<Term> Terms { get; set; }
}
: 여기 내 모델입니다
불행히도, 이것은 업데이트되지 않습니다. 데이터베이스를 확인할 때 중간 테이블에 아무 것도 없습니다. 예외도 발생하지 않았습니다.
위의 간단한 설정을 통해 속성 비트없이 실행했고 링크 테이블에 레코드를 얻었습니다. 당신의 설정과 속성 비트없이 시도 해 봤나? – WestDiscGolf
@WestDiscGolf null 일 경우 속성 항목을 건너 뛰는 코드를 추가했습니다. 그것은 여전히 나를 위해 그것을 만들지 않았다. db.Terms.Attach를 사용 했습니까? –
엔티티를 가져 오기 위해 추적을 사용하지 않습니다. –