많은 관계가 많은 책 및 작성자 엔티티가 있으며 데이터베이스 첫 번째 방법으로 관계 (접합 테이블의 레코드)를 저장하려고합니다.데이터베이스에서 하위 엔티티를 가져 오지 않고 많은 관계를 추가하십시오.
나는 위의 코드에서 코드
[HttpPost]
public ActionResult Edit(BookViewModel bookv)
{
Mapper.CreateMap<AuthorViewModel, Author>();
List<Author> authors = Mapper.Map<List<AuthorViewModel>, List<Author>>
(bookv.Authors.ToList());
//remove authors from book object to avoid multiple entities with same key error
bookv.Authors.Clear();
Mapper.CreateMap< BookViewModel,Book>();
Book book = Mapper.Map<BookViewModel,Book>(bookv);
db.Books.Attach(book);
book.Authors.Clear();
foreach (Author a in authors)
{
//Fetch Author and add relation to book object
book.Authors.Add(db.Authors.Single(at=>at.AuthorId==a.AuthorId));
}
db.ObjectStateManager.ChangeObjectState(book, EntityState.Modified);
db.SaveChanges();
return RedirectToAction("Index");
}
의 내 작업 버전으로 시작하고 싶은, 내가 책 객체와 관계를 추가 할 데이터베이스에서 저자 개체 (기록)를 가져 오는하고있다. 반면, 데이터베이스에서 책 객체를 가져 오지 않지만 컨텍스트에 첨부합니다. Author 객체와 비슷한 기능을 수행 할 수 있습니까?
이 코드와 함께이 일을 시도했지만 먼저 저자 테이블에 새 레코드를 추가하고 책의 관계와 새로 만든 (원치 않는) 저자 추가:
[HttpPost]
public ActionResult Edit(BookViewModel bookv)
{
Mapper.CreateMap<AuthorViewModel, Author>();
List<Author> authors = Mapper.Map<List<AuthorViewModel>, List<Author>>(bookv.Authors.ToList());
// bookv.Authors.Clear();
Mapper.CreateMap< BookViewModel,Book>();
Book book = Mapper.Map<BookViewModel,Book>(bookv);
foreach (Author a in book.Authors)
{
db.Authors.Attach(a);
}
db.Books.Attach(book);
foreach (Author a in authors)
{
book.Authors.Add(a);
}
db.ObjectStateManager.ChangeObjectState(book, EntityState.Modified);
db.SaveChanges();
return RedirectToAction("Index");
}
감사 @thedeeno. 그러나 그것은 전혀 아무것도하지 않았습니다. 오류 및 중복이 없습니다. –
코드를이 코드로 바꿨습니다. 저자 이전에 책을 첨부하는 것이 핵심이었습니다. 'db.Books.Attach (book); foreach (저자의 저자) { db.Authors.Attach (a); } book.Authors.Clear(); foreach (저자의 저자) { book.Authors.Add (a); } ' –
그래서 책을 첨부하면 처음에는 도움이 되었습니까? –