0

流暢に話せるようになりたいので、簡単な例から始めようと思いました。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

しかし、私はそれを修正する方法がわかりません。おそらくこれは、自動マッピングを使用しているという事実と関係がありますか?

誰かに何かアイデアがあれば、私は非常に感謝しています。

どうもありがとう!

4

1 に答える 1

0

「データベースには、'Author' という名前のオブジェクトが既に存在します。」

データベースを調べて、Author テーブルがないことを確認してください。

于 2013-10-25T04:11:21.470 に答える