nhibernatec#-4.0conform

ConfORM Nhibernate OneToManyKeyColumnApplier Problem


I am using ConfORM Nhibernate in one of my MVC project. And had 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);

And classes Order and User: 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 relations like this: Orders.UserId -> User.Id in the DB. But when the Nhibernate had genereted DB we had this problem (See image):

table structure

UPS. Double reference User and UserId suddenly uppeared. And when we removed [user] Nhivernate can`t do inner join this tables. It sad that double time: Invalid column name 'User'. Invalid column name 'User'.

I think there is some problems with setuping ConfORM. If I remove mapper.PatternsAppliers.Merge(new OneToManyKeyColumnApplier(relationalMapper)); ConfORM generete just [User] reference key.

Anyone know what the problem is here? Thanks in Advance.


Solution

  • You need to add the following applier

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

    Probably thats because column name has changed from Users side, but has not changed from Order side.