Я хочу сохранить эту книгу, создав отношения с библиотекой и книжной полкой, не извлекая полный объект Библиотека и книжная полка
Просто добавьте свойство BookshelfId в свой класс книги.
public class Book
{
public int Id { get; set; }
public int LibraryId { get; set; }
public string Title { get; set; }
public Bookshelf Bookshelf { get; set; }
public int BookshelfId { get; set; }
}
Затем вы можете сделать:
DbContext.Add(new Book { LibraryId = 1, BookshelfId = 1});
DbContext.SaveChanges();
Что если, например, я хочу создать новую библиотеку и связать ее с некоторыми уже существующими книгами
Добавить свойство навигации библиотеки в книге
public class Book
{
public int Id { get; set; }
public Library Library { get; set; }
...
}
, а затем вы можете обновить свойство библиотеки в книгах, используя только их идентификаторы
var library = new Library { Name = "My library" };
DbContext.Libraries.Add(library);
var bookIds = new int[] {1, 2};
foreach(var bookId in bookIds) {
var book = new Book { Id= bookId, Library = library};
DbContext.Attach(book);
DbContext.Entry(book).Property(b => b.LibraryId).IsModified = true;
}
DbContext.SaveChanges();