gpt4 book ai didi

c# - Breeze + NHibernate 多对一关系,避免必须指定关系键

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:45 25 4
gpt4 key购买 nike

以下多对一映射有效(取自 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>

抛出的错误:找不到属性 Models.NorthwindIB.NH.UserRole.User 的匹配 fk

这能否在未来版本的 BreezeJs 中以某种方式处理,或者目前是否有一种无需在模型本身中指定这些键的方法?还是比我看到的更多?

编辑(非官方解决方案):感谢您引导我们朝着正确的方向前进。由于这是我们想要解决的问题,因此我们根据 Steve Schmitt 所说的内容自行进行了一些修改。

这是更改的链接,您可以看到我们是如何解决这个问题的,因此它可以对其他人有所帮助。 (请注意,此代码仅适用于 NHibernate)

https://github.com/maca88/Breeze/commit/7a80c35cf0b20b5cffdef6d2eddeccd1bdeb3735

最佳答案

没有,但我们正计划解决这个问题。正如您和 Rippo 了解到的那样,问题在于客户端需要 FK 才能使 Breeze 工作。他们还需要在 SaveChanges 处理期间重新连接服务器上的实体。

我们的想法(尚未尝试)是:

  1. 在实际模型中不存在的元数据中创建必要的外键属性。这些将以某种方式标记为“合成”(“$”前缀、特殊属性等)。
  2. 在 JSON 序列化过程中,从相关实体或 NH 代理填充合成外键。
  3. 在 JSON 反序列化过程中(保存时),将合成外键信息与实体一起携带,因此可用于重新建立关系或创建 NH 代理。

这不是一个简单的练习。我们意识到这对于拥有现有 N/Hibernate 模型并且不想修改它们以使用 Breeze 的开发人员来说很重要。

关于c# - Breeze + NHibernate 多对一关系,避免必须指定关系键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com