0

我是 Angular 和 Breeze 的新手。我正在尝试同时创建一个具有客户关系的新组。我的数据库结构有 3 个表,它们受到 Groups、UserToGroups 和 CustomersToGroups 表的影响。实体管理器已注册表和引用。我的问题是,我是否需要先创建组才能将记录添加到查找表?如果 groupId 不存在,则不应创建 UserToGroups 记录或 CustomersToGroups 记录。Breeze 和实体经理是否正在处理所有这些?我可以一次完成所有这些吗?如何?

controller.js
function addCustAndGroup(CustId, grpId, GroupCategory, GroupDesc) {
 var newGroup = app.dataservice.manager.createEntity("Group");
 newGroup.GroupId(CustId);
 newGroup.GroupCategory(GroupCategory);
 newGroup.GroupDescription(GroupDesc);
 manager.StudnetsToGroup.push(studentToGroup);
 manager.UserToGroup.push(userToGroup);
 manager.saveChanges();
};
4

1 回答 1

0

我想指出你正在做的一件我觉得令人担忧的事情:你dataservice将经理暴露给它的调用者。拥有a 的一个关键原因dataservice是封装 EntityManager ...以对所有调用者隐藏它。如果您要将管理器公开给调用者,那么为什么还要打扰数据服务呢?

我没有很多绝对规则,但你已经打破了少数几个规则之一,即“永远不要从数据服务中公开 EntityManager。 ”我从来没有放松过这个规则。我向你保证,你会后悔打破它。

我认为您想要做的是让您的数据服务公开一个createGroup方法。创建组的所有工作都应该隐藏在dataservice.

现在我已经完成了咆哮,我正在尝试理解您的实际问题和您的代码。我很抱歉,但我有点迷路了。我被难住了,manager.UserToGroup.push因为 (a) EntityManager 没有UserToGroup成员,并且 (b) Breeze API 中没有push方法......当然没有像将实体添加/附加到 EntityManager 缓存中那样。

我不知道您的哪些“表”是“查找表”。无论如何,我对“表”和“记录”这两个词感到困惑,因为您似乎真的在谈论实体类型和实体实例,而不是数据库对象。我得到了并行性,但值得在实体和它们映射到的数据库结构之间保持清晰的区别。

最后承认我的困惑:您的问题主题是指“复杂实体”。Breeze 有一个称为“复杂类型”的概念。我不认为那是你的意思。我认为你的意思是你相信你的实体很复杂。那正确吗?

我觉得这些都没有接近你的问题的答案......我无法理解。这似乎是关于您是否必须在另一种类型之前创建一种类型的实体。但我不能确定。

我认为你必须先澄清你的问题,然后才能得到正确的答案。

于 2013-11-01T07:03:52.040 回答