FluentNHibernate使用额外数据映射连接表

时间:2012-06-19 09:15:57

标签: c# nhibernate fluent-nhibernate

我有一个非常简单的数据库表,它以many2many关系连接另外两个表。

(几乎让用户加入问题 - 想想书签)

此表的NHibernate实体如下所示:

public class UserToRequestSubscription
{
    public virtual int Id{get;set;}
    public vitual int UserId{get;set;}
    public virtual int RequestId { get; set; }
    public virtual bool AcceptedByRequester { get; set; }
}

我想要做的是添加一个新属性:

    public virtual RequestForHelp Request { get; set; }

到目前为止,我可以将其用于选择。在我的UserToRequestSubscriptionMapping我可以做到:References(x => x.Request)

我遇到的问题是在尝试插入新的UserToRequestSubscription时抛出:Invalid index 6 for this SqlParameterCollection with Count=6.

我已经阅读了这个错误,当我删除RequestId属性时它就消失了但是如果没有这个,插入新订阅时不会填充DB中的RequestId字段。

我该怎么做呢?

我的目标是为RequestForHelp项目保存对数据库的额外调用。

这是映射类:

public UserToRequestSubscriptionMapping()
{
      Id(x => x.Id);
      Map(x => x.UserId);
      Map(x => x.RequestId);
      Map(x => x.CreatedDate);
      Map(x => x.AcceptedByRequester);
      Map(x => x.IsActive);
      Map(x => x.DeactivatedDate);
      References(x => x.Request).Column("RequestId");
      Table("TheTable");
  }

1 个答案:

答案 0 :(得分:2)

我猜测问题在于您根据映射引用了两次RequestId。我认为添加RequestId后,Request属性是多余的。

public class UserToRequestSubscription
{
    public virtual int Id{get;set;}
    public vitual User User{get;set;} // you'd probably also change this, too
    public virtual RequestForHelp Request { get; set; } // changed
    public virtual bool AcceptedByRequester { get; set; }
}

public UserToRequestSubscriptionMapping()
{
    Id(x => x.Id);
    Map(x => x.CreatedDate);
    Map(x => x.AcceptedByRequester);
    Map(x => x.IsActive);
    Map(x => x.DeactivatedDate);
    References(x => x.Request).Column("RequestId");
    References(x => x.User).Column("UserId");
    Table("TheTable");
}