0
votes

This issue, with scalar complex properties, was reported earlier and resolved in breeze 1.3.5. I am still seeing it, with non-scalar complex properties, in breeze 1.4.5. After creating an entity using this metadata, the exportEntities() method on the entity manager fails with an exception in JSON.stringify, complaining about a circular reference.

Here's some code to replicate the problem:

var jsonMetadata = {
  "metadataVersion": "1.0.5",
  "namingConvention": "camelCase",
  "localQueryComparisonOptions": "caseInsensitiveSQL",
  "dataServices": [{"serviceName": "breeze/myservice/"    }  ],
  "structuralTypes": [
    {
      "shortName": "Address",
      "namespace": "mynamespace",
      "isComplexType": true,
      "dataProperties": [
        {"name": "street"},
        {"name": "city"},
      ]
    },
    {
      "shortName": "Person",
      "namespace": "mynamespace",
      "autoGeneratedKeyType": "Identity",
      "defaultResourceName": "Person",
      "dataProperties": [
        {"name": "_id", "dataType": "MongoObjectId", "isNullable": false,     "defaultValue": "",
          "isPartOfKey": true },
        {"name": "displayName", "dataType": "String"},
        { "name": "addresses",
          "complexTypeName": "Address:#mynamespace",
          "isScalar": false
        }
      ]
    }
  ],
  "resourceEntityTypeMap": {
    "Person": "Person:#mynamespace"
  }};

var manager = new breeze.EntityManager();
manager.metadataStore.importMetadata(jsonMetadata);

var person = manager.createEntity('Person', {displayName: "Joe Bob"});
var myAddresses = person.getProperty('addresses');
var myAddressProp = manager.metadataStore.getEntityType("Address").createInstance(
    {street: "Main", city:"Pleasantville"});
myAddresses.push(myAddressProp);

console.log("Complex property is a circular datatype, cannot convert to JSON - that's fine")
//JSON.stringify(person.addresses); // fails with error

console.log("... except that manager.exportEntities() doesn't handle that case!");
var entities = manager.exportEntities(); // also fails

The circular reference that JSON.stringify is complaining about seems to be in the 'parent' property of the ComplexAspect of the Address property.

Also, if there's a simpler way to populate the addresses array, I'd appreciate some help.

1
I will try to repro this later today. Good repro, thx.Jay Traband

1 Answers

0
votes

Ok, this should be fixed as of Breeze v 1.4.6 ( or later) available now

------------- Original Post ------------------

This is a bug. It will be fixed in the next release, out later this week or early next week. and... thanks for the repro. I will post back when it gets in.