Entity Frameworkを使って生徒に本を追加しようとすると「Multiplicity constraint violated」例外がスローされますロール 'Student_LendedBooks_Source'の関係 'LibarySystem.DataModel.Student_LendedBooks'の多重度は1または0..1です。 "どうすれば修正できますか?私はEntity Frameworkについてよく知らない。何か助けてくれてありがとう。多重度制約に違反しています。関係「LibarySystem.DataModel」のロール「Student_LendedBooks ...」は多重度1または0..1を持っています
DbContextクラス:
public class DbContext : System.Data.Entity.DbContext {
public DbSet<Student> Students { get; set; }
public DbSet<Book> Books { get; set; }
}
Studentクラス:
public class Student {
public Student() {
LendedBooks = new HashSet<Book>();
}
[Key]
public string PESEL { get; set; }
public string Name { get; set; }
public string SecondName { get; set; }
public string Surname { get; set; }
public string Class { get; set; }
public virtual ICollection<Book> LendedBooks { get; set; }
}
Bookクラス:
public class Book {
public Book() {
IsLend = false;
}
[Key]
public string CatalogueNumber { get; set; }
public string StudentPesel { get; set; }
public virtual Student Student { get; set; }
public string Name { get; set; }
public string Author { get; set; }
public DateTime? DateOfLend { get; set; }
public DateTime? DateOfReturn { get; set; }
public bool IsLend { get; set; }
}
とメソッドを追加します。
public static void AddBookToStudent(Student student, Book book) {
using (var context = new DbContext()) {
var findStudent = context.Students.Find(student.PESEL);
var findBook = context.Books.Find(book.CatalogueNumber);
if (findBook != null) {
findBook.DateOfLend = DateTime.Today;
findBook.DateOfReturn = book.DateOfLend + new TimeSpan(7, 0, 0, 0);
findBook.StudentPesel = findStudent?.PESEL;
findBook.Student = findStudent;
findBook.IsLend = true;
}
findStudent?.LendedBooks.Add(book);
context.SaveChanges();
}
}
で
book
を置き換え、書き込んだとして、findBook != null
ブロック内findStudent?.LendedBooks.Add(findBook)
コールを移動して、あなたには、いくつかの 'Student'に同じ' Book'を追加しようとしていますか? –