以下多对一映射正在运行(取自NorthBreeze):
public partial class UserRole
{
public virtual long ID { get; set; }
public virtual long UserId { get; set; }
public virtual long RoleId { get; set; }
public virtual User User { get; set; }
public virtual Role Role { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Models.NorthwindIB.NH" assembly="Model_NorthwindIB_NH">
<class name="UserRole" table="`UserRole`" dynamic-update="true" optimistic-lock="dirty">
<id name="ID" column="`ID`" type="long" unsaved-value="0">
<generator class="native" />
</id>
<many-to-one name="User" column="`UserId`" class="User" />
<many-to-one name="Role" column="`RoleId`" class="Role" />
<property name="UserId" type="long" not-null="true" insert="false" update="false" />
<property name="RoleId" type="long" not-null="true" insert="false" update="false" />
</class>
</hibernate-mapping>
如何使这种多对一工作(没有在模型中指定UserId和RoleId属性):
public partial class UserRole
{
public virtual long ID { get; set; }
public virtual User User { get; set; }
public virtual Role Role { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Models.NorthwindIB.NH" assembly="Model_NorthwindIB_NH">
<class name="UserRole" table="`UserRole`" dynamic-update="true" optimistic-lock="dirty">
<id name="ID" column="`ID`" type="long" unsaved-value="0">
<generator class="native" />
</id>
<many-to-one name="User" column="`UserId`" class="User" not-null="true" />
<many-to-one name="Role" column="`RoleId`" class="Role" not-null="true" />
</class>
</hibernate-mapping>
抛出错误: 找不到匹配的fk属性Models.NorthwindIB.NH.UserRole.User
这可以在BreezeJs的未来版本中以某种方式处理,还是目前有一种方法可以在模型本身中指定这些键?或者还有比我看到的更多的东西?
编辑(非官方解决方案): 感谢您指导我们正确的方向。由于这是我们想要照顾的事情,我们根据Steve Schmitt所说的做了一些修改。
以下是更改的链接,以便您了解我们如何解决此问题,因此它可以对其他人有所帮助。 (请注意,此代码仅适用于NHibernate)
https://github.com/maca88/Breeze/commit/7a80c35cf0b20b5cffdef6d2eddeccd1bdeb3735
答案 0 :(得分:1)
不,但我们打算解决这个问题。正如您和Rippo所了解的那样,问题在于客户端需要FK才能使Breeze工作。在SaveChanges
处理期间,还需要重新连接服务器上的实体。
我们的想法(尚未尝试过)是:
不是一项微不足道的练习。我们意识到这对于拥有现有N / Hibernate模型且不想修改它们以使用Breeze的开发人员来说非常重要。
答案 1 :(得分:0)
我已下载NorthBreeze并快速查看。 Breeze有一个FK map
的概念,我怀疑需要FK来链接实体。
根据docs ...
Breeze协会需要外键。
这意味着所有外键都需要在微风中暴露,以便允许导航/检索相关实体。在您的示例中,它最有可能允许breeze列出用户及其相关角色。
<property name="UserId" ... insert="false" update="false" />
<property name="RoleId" ... insert="false" update="false" />
这些外键的NHibernate映射禁止这些键直接更改。因此,我会保留映射,因为它不会对代码库造成任何明显的影响。