首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConfORM Nhibernate OneToManyKeyColumnApplier问题

ConfORM Nhibernate OneToManyKeyColumnApplier问题
EN

Stack Overflow用户
提问于 2010-11-30 23:00:10
回答 1查看 485关注 0票数 3

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

代码语言:javascript
复制
        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);

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

代码语言:javascript
复制
 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; }       
}

和用户:

代码语言:javascript
复制
 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; }
}

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

UPS。双重引用用户和UserId突然出现了。当我们删除用户Nhivernate时,Nhivernate不能进行内连接。它加倍地表示:无效列名'User‘。无效的列名'User‘。

我认为设置ConfORM有一些问题。如果我删除mapper.PatternsAppliers.Merge(新OneToManyKeyColumnApplier(relationalMapper));ConfORM只生成用户引用键。

有人知道问题出在哪里吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-01 02:56:29

您需要添加以下应用程序

代码语言:javascript
复制
mapper.PatternsAppliers.Merge(new ManyToOneColumnApplier());

这可能是因为列名在用户端更改了,但在订单端没有更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4315098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档