3

我在我的一个 MVC 项目中使用 ConfORM Nhibernate。一对多映射有问题。

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

以及订单和用户类:一个用户有很多订单。

 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; }       
}

和用户:

 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; }
}

我期望这样的关系:数据库中的 Orders.UserId -> User.Id。但是当 Nhibernate 生成数据库时,我们遇到了这个问题(见图):

表结构

UPS。突然出现双重引用用户和用户ID。而当我们删除 [user] Nhivernate 时,不能对这些表进行内部连接。双重时间令人难过:列名“用户”无效。列名“用户”无效。

我认为设置 ConfORM 存在一些问题。如果我删除 mapper.PatternsAppliers.Merge(new OneToManyKeyColumnApplier(relationalMapper)); ConfORM 仅生成 [User] 参考密钥。

有人知道这里有什么问题吗?提前致谢。

4

1 回答 1

2

您需要添加以下应用程序

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

可能那是因为列名从用户端改变了,但从订单端没有改变。

于 2010-11-30T18:56:28.783 回答