ConfORM Nhibernate OneToManyKeyColumnApplier Problem

I am using ConfORM Nhibernate in one of my MVC projects. And there was a problem with One to Many Mappings.

        IEnumerable<Type> domainEntities = this.GetDomainEntities();

        var relationalMapper = new ObjectRelationalMapper();
        relationalMapper.TablePerConcreteClass(domainEntities);
        relationalMapper.Patterns.PoidStrategies.Add(new NativePoidPattern());
        relationalMapper.Cascade<Category, Product>(Cascade.All);
        relationalMapper.ManyToMany<Category, Product>();
        relationalMapper.Cascade<Order, Product>(Cascade.Persist);

        var mapper = new Mapper(relationalMapper);
        var englishInflector = new EnglishInflector();

        mapper.PatternsAppliers.Merge(new ClassPluralizedTableApplier(englishInflector));
        mapper.PatternsAppliers.Merge(new OneToManyKeyColumnApplier(relationalMapper));
         .....

        HbmMapping mapping = mapper.CompileMappingFor(domainEntities);

Both the Order and User classes: one user had many orders.

 public class Order : BaseEntity
{
    public Order(User user)
    {
        if (user == null)
        {
            throw new ArgumentNullException("user");
        }

        this.User = user;           
    }

    protected Order()
    {
    }

    public virtual User User { get; protected set; }       
}

And Users:

 public class User : BaseEntity
{
    public User()
    {
        this.Orders = new HashedSet<Order>();
    }

    public virtual string FirstName { get; set; }       

    public virtual ISet<Order> Orders { get; protected set; }
}

I expect such a relationship: Orders.UserId β†’ User.Id in the database. But when Nhibernate created the database, we had this problem (see image):

table structure

UPS Double links User and UserId unexpectedly appeared. And when we deleted [user], Nhivernate cannot make internal joins to these tables. Sad that double time: Invalid column name "User". Invalid user column name.

, ConfORM. mapper.PatternsAppliers.Merge( OneToManyKeyColumnApplier (relationalMapper)); ConfORM [User].

- , ? Advance.

+3
1

mapper.PatternsAppliers.Merge(new ManyToOneColumnApplier());

, , , .

+2

Source: https://habr.com/ru/post/1777684/


All Articles