更新现有Breeze实体/实体不跟踪对象更改

时间:2017-02-28 17:24:56

标签: breeze breeze-sharp

以下代码按预期从我的数据库返回单个记录。但是,它无法跟踪UI中的更改。我正在使用angularjs将myObject的属性绑定到各个字段。一切都初始加载正常,但如果我对对象进行更改并使用breeze的EntityManager.saveChanges(),它不会检测到任何更改。我可以创建一个新实体并保存它,但试图了解如何处理更新。在检索实体后,是否需要分离实体,然后重新附加并保存?

或者这是将检索到的实体分配给我的javascript(使用TypeScript)对象的错误方法吗? myObject = data.results [0];

let query = breeze.EntityQuery.from("myTable").where('id', '==', incomingId).expand(['relatedTable']);

            dataService.executeQuery(query).then((data) => {
                this.myObject = data.results[0];
            });

1 个答案:

答案 0 :(得分:0)

我必须添加' .toType(" myType")'子句到查询。我使用了' metadataStore.registerEntityTypeCtor'在EntityManager中注册我的类型,但这个步骤对我来说仍然是必要的,我不完全理解。

let query = breeze.EntityQuery.from("myTable").where('id', '==', incomingId).expand(['relatedTable']).toType("myType");

        dataService.executeQuery(query).then((data) => {
            this.myObject = data.results[0];
        });

编辑:我还发现使用EFContextProvider进行查询可以改善我的结果并减少难以置信的问题。在过去,我只使用了Context,虽然它有效,但我的实体类型在客户端不被Breeze理解。

readonly EFContextProvider<Context> _contextProvider = new EFContextProvider<Context>();

    [HttpGet]
    public IQueryable<Dispute> Disputes()
    {
        return _contextProvider.Context.Disputes;
    }