&引用;不是一个协会”;使用具有特殊NHibernate映射的BreezeJS

&引用;不是一个协会”;使用具有特殊NHibernate映射的BreezeJS,nhibernate,breeze,Nhibernate,Breeze,我正在使用Breeze与Web API和NHibernate。以下NHibernate映射类型(可能很少使用)在类NHMetadataBuilder的方法MakeAssociationProperty中导致Breeze错误消息“Not a association”: <set name="Zugnummern" table="USER_ZUGNUMMER_T" lazy="true" cascade="save-update"> <key co

我正在使用Breeze与Web API和NHibernate。以下NHibernate映射类型(可能很少使用)在类NHMetadataBuilder的方法MakeAssociationProperty中导致Breeze错误消息“Not a association”:

<set name="Zugnummern"
     table="USER_ZUGNUMMER_T"
     lazy="true"
     cascade="save-update">
  <key column="USER_ID" />
  <element  column="TRAIN_NO"
      type="string"
      length="6"
      not-null="true"
      unique="false" />
</set>

如何将Breeze与这种特殊的NHibernate映射一起使用?

例外情况“非关联”通过检查
BreezeContextProvider.NH
NHMetadataBuilder.MakeAssociationProperty
方法中的
collectionPersister
是否为
ManyToMany
OneToMany
,可以防止出现这种情况,因为对于属性“Zugnumern”的上述样本集映射,这两个条件都是假的:

// inverse foreign key
var collectionPersister = joinable as AbstractCollectionPersister;
if (collectionPersister != null)
{
      if (collectionPersister.IsManyToMany || collectionPersister.IsOneToMany)
      {
           // many-to-many relationships do not have a direct connection on the client or in metadata
           var elementPersister = collectionPersister.ElementPersister as AbstractEntityPersister;
           if (elementPersister != null)
           {
               fkNames = GetPropertyNamesForColumns(elementPersister, columnNames);
               if (fkNames != null)
                     nmap.Add("invForeignKeyNamesOnServer", fkNames);
           }
       }
}