User クラスに本のリストとオプションのお気に入りの本の両方を含めようとしています。以下の SaveChanges() を呼び出すと、エラー メッセージが表示されます
データベースへの変更は正常にコミットされましたが、オブジェクト コンテキストの更新中にエラーが発生しました。ObjectContext が矛盾した状態にある可能性があります。内部例外メッセージ: 多重度制約違反。関係「ConsoleApplication1.User_FavoriteBook」のロール「User_FavoriteBook_Target」の多重度は 1 または 0..1 です。"}
私が達成したいのは、User テーブルに、お気に入りの本の Id を格納する列を持たせることです。これどうやってするの?
public class User
{
public int UserId { get; set; }
public List<Book> Books { get; set; }
public Book FavoriteBook { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string Name { get; set; }
}
public class UserContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new UserConfiguration());
}
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
HasMany(e => e.Books).WithRequired().WillCascadeOnDelete();
HasOptional(e => e.FavoriteBook).WithRequired().WillCascadeOnDelete(false);
}
}
}
メインプログラム:
User user = new User();
Book book1 = new Book { Name = "book1" };
Book book2 = new Book { Name = "book2" };
user.Books.Add(book1);
user.Books.Add(book2);
user.FavoriteBook = book2;
using (UserContext context = new UserContext())
{
context.Users.Add(user);
context.SaveChanges();
}