流暢に話せるようになりたいので、簡単な例から始めようと思いました。Fluent がテーブルを 2 回作成しようとし続け、「データベースには既に 'Author' という名前のオブジェクトがあります」という結果になるため、何かが欠けているに違いないことが判明しました。
次の 2 つのデータ クラスがあります。
public class Author
{
public virtual int Id {get;set;}
public virtual string name {get;set;}
public virtual IList<Book> books { get;protected set; }
public Author()
{
books = new List<Book>();
}
public virtual void AddBook(Book book)
{
books.Add(book);
book.authors.Add(this);
}
}
public class Book
{
public virtual int Id { get; set; }
public virtual string name { get; set; }
public virtual IList<Author> authors {get; protected set; }
public Book()
{
authors = new List<Author>();
}
public virtual void AddAuthor(Author author)
{
authors.Add(author);
author.books.Add(this);
}
}
そして、私は次のオーバーライドを提供しています:
public class BooksOverride : IAutoMappingOverride<Book>
{
public void Override(AutoMapping<Book> mapping)
{
mapping.HasManyToMany(map => map.authors)
.Cascade.All()
.Inverse()
.Table("BooksAuthors");
}
}
public class AuthorOverride : IAutoMappingOverride<Author>
{
public void Override(AutoMapping<Author> mapping)
{
mapping.HasManyToMany(map => map.books).Cascade.All().Table("BooksAuthors");
}
}
挿入コードは次のとおりです。
using (var session = HibernateHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var author1 = new Author { name = "john"};
var author2 = new Author { name = "william" };
var book1 = new Book { name = "A book"};
author1.AddBook(book1);
session.Save(author1);
transaction.Commit();
}
}
なぜこれがうまくいかないのか、一生わからない!
これと同様の問題があるようです: Fluent Nhibernate Many to Many Mapping Way
しかし、私はそれを修正する方法がわかりません。おそらくこれは、自動マッピングを使用しているという事実と関係がありますか?
誰かに何かアイデアがあれば、私は非常に感謝しています。
どうもありがとう!