流利的NHibernate多对多自动映射

本文关键字:映射 NHibernate | 更新日期: 2023-09-27 18:15:39

我正在努力学习流利,我想我应该从一个简单的例子开始。事实证明,我一定是错过了一些东西,因为流畅的不断尝试创建一个表两次导致"已经有一个名为'Author'的对象在数据库中。"

我有以下两个数据类:

  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();

            }
        }

现在我不知道为什么这不起作用!

似乎我有一个类似的问题:流利的Nhibernate多对多映射方式

但我不知道如何修复它。也许这与我正在使用自动映射有关?

如果有人有任何建议,我将非常感激。

多谢!

流利的NHibernate多对多自动映射

"数据库中已经存在一个名为'Author'的对象。"

查看数据库,确保没有Author表