Edit: JSON not complete, had to cut some
Somehow one Entity has EntityState “Added” when queried from the Server for the first time.
I create 3 users in the DBContextInitializer. This happens every time I start my app. It will be in State “Unchanged” if I call Manager.rejectChanges(), but I have to do this manually.
If i do not do that, and save another Entity (maybe Team/Order/OrderDetail) the specific User gets saved as a copy of its original Entity with a unique key but identical values like name and so on. I checked my code a dozen times if I might have forgotten something, but I do not invoke any change in state on this User-Entity anywhere.
This is a print of Manager.getChanges (EntityType of “User”):
[
[
{
"entityAspect": {
"entityGroup": {
"entityManager": {
"serviceName": "api/Breeze/",
"metadataStore": {
"namingConvention": {
"name": "noChange"
},
"localQueryComparisonOptions": {
"name": "caseInsensitiveSQL",
"isCaseSensitive": false,
"usesSql92CompliantStringComparison": true
},
"dataServices": [
{
"serviceName": "api/Breeze/",
"adapterName": null,
"hasServerMetadata": true
}
],
"_resourceEntityTypeMap": {
"Mvls": "Mvl:#MAHN.Model",
"MvlOps": "MvlOP:#MAHN.Model",
"StatusOps": "StatusOP:#MAHN.Model",
"Teams": "Team:#MAHN.Model",
"TeamLeaders": "TeamLeaders:#MAHN.Model",
"Users": "User:#MAHN.Model",
"TeamUsers": "TeamUsers:#MAHN.Model",
"UserRoles": "UserRoles:#MAHN.Model",
"Roles": "Role:#MAHN.Model",
"TeamRoles": "TeamRoles:#MAHN.Model"
},
"_entityTypeResourceMap": {
"Mvl:#MAHN.Model": "Mvls",
"MvlOP:#MAHN.Model": "MvlOps",
"StatusOP:#MAHN.Model": "StatusOps",
"Team:#MAHN.Model": "Teams",
"TeamLeaders:#MAHN.Model": "TeamLeaders",
"User:#MAHN.Model": "Users",
"TeamUsers:#MAHN.Model": "TeamUsers",
"UserRoles:#MAHN.Model": "UserRoles",
"Role:#MAHN.Model": "Roles",
"TeamRoles:#MAHN.Model": "TeamRoles"
},
"_entityTypeMap": {
"User:#MAHN.Model": {
"name": "User:#MAHN.Model",
"shortName": "User",
"namespace": "MAHN.Model",
"defaultResourceName": "Users",
"dataProperties": [
{
"name": "UserId",
"nameOnServer": "UserId",
"dataType": "Int32",
"isNullable": false,
"defaultValue": 0,
"validators": [
{
"validatorName": "required"
},
{
"validatorName": "int32"
}
],
"isPartOfKey": true
},
{
"name": "UserName",
"nameOnServer": "UserName",
"dataType": "String",
"isNullable": true,
"fixedLength": false,
"validators": [
{
"validatorName": "string"
}
],
"isPartOfKey": false
},
{
"name": "Nachname",
"nameOnServer": "Nachname",
"dataType": "String",
"isNullable": true,
"fixedLength": false,
"validators": [
{
"validatorName": "string"
}
],
"isPartOfKey": false
},
{
"name": "Vorname",
"nameOnServer": "Vorname",
"dataType": "String",
"isNullable": true,
"fixedLength": false,
"validators": [
{
"validatorName": "string"
}
],
"isPartOfKey": false
},
{
"name": "OasisLogin",
"nameOnServer": "OasisLogin",
"dataType": "String",
"isNullable": true,
"fixedLength": false,
"validators": [
{
"validatorName": "string"
}
],
"isPartOfKey": false
}
],
"navigationProperties": [
{
"name": "TeamUsers",
"nameOnServer": "TeamUsers",
"entityTypeName": "TeamUsers:#MAHN.Model",
"isScalar": false,
"associationName": "TeamUsers_User",
"foreignKeyNames": [],
"foreignKeyNamesOnServer": [],
"validators": []
},
{
"name": "UserRoles",
"nameOnServer": "UserRoles",
"entityTypeName": "UserRoles:#MAHN.Model",
"isScalar": false,
"associationName": "UserRoles_User",
"foreignKeyNames": [],
"foreignKeyNamesOnServer": [],
"validators": []
}
],
"autoGeneratedKeyType": "Identity",
"validators": []
},
"Team:#MAHN.Model": {
"entityType": {
"name": "Team:#MAHN.Model",
"shortName": "Team",
"namespace": "MAHN.Model",
"defaultResourceName": "Teams",
"autoGeneratedKeyType": "Identity"
},
"_indexMap": {
"1": 1,
"2": 0,
"3": 2,
"4": 3
},
"_entities": [
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "Team:#MAHN.Model",
"values": [
2
]
},
"wasLoaded": true
}
},
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "Team:#MAHN.Model",
"values": [
1
]
},
"wasLoaded": true
}
},
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "Team:#MAHN.Model",
"values": [
3
]
},
"wasLoaded": true
}
},
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "Team:#MAHN.Model",
"values": [
4
]
},
"wasLoaded": true
}
}
],
"_emptyIndexes": []
},
"TeamLeaders:#MAHN.Model": {
"entityType": {
"name": "TeamLeaders:#MAHN.Model",
"shortName": "TeamLeaders",
"namespace": "MAHN.Model",
"defaultResourceName": "TeamLeaders",
"autoGeneratedKeyType": "Identity"
},
"_indexMap": {
"1": 0
},
"_entities": [
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "TeamLeaders:#MAHN.Model",
"values": [
1
]
},
"wasLoaded": true
}
}
],
"_emptyIndexes": []
}
},
"_unattachedChildrenMap": {
"map": {}
},
"keyGenerator": {
"_tempIdMap": {},
"nextNumber": -1,
"nextNumberIncrement": -1,
"stringPrefix": "K_"
},
"_hasChanges": true
},
"entityType": {
"name": "User:#MAHN.Model",
"shortName": "User",
"namespace": "MAHN.Model",
"defaultResourceName": "Users",
"autoGeneratedKeyType": "Identity"
},
"_indexMap": {
"1": 2,
"2": 0,
"3": 1
},
"_entities": [
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "User:#MAHN.Model",
"values": [
2
]
},
"wasLoaded": true
}
},
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "User:#MAHN.Model",
"values": [
3
]
},
"wasLoaded": true
}
},
null
],
"_emptyIndexes": []
},
"entityState": {
"_$typeName": "EntityState",
"name": "Added"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "User:#MAHN.Model",
"values": [
1
]
},
"wasLoaded": true
}
}
]
]
I cannot extract very much information out of this, but I think this special part is strange. Why is the third object in this array null but shows up shortly after that array with State “Added”:
"_entities": [
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "User:#MAHN.Model",
"values": [
2
]
},
"wasLoaded": true
}
},
{
"entityAspect": {
"entityState": {
"_$typeName": "EntityState",
"name": "Unchanged"
},
"isBeingSaved": false,
"originalValues": {},
"_validationErrors": {},
"validationErrorsChanged": {
"name": "validationErrorsChanged_entityAspect",
"_nextUnsubKey": 1
},
"propertyChanged": {
"name": "propertyChanged_entityAspect",
"_nextUnsubKey": 1
},
"_entityKey": {
"entityType": "User:#MAHN.Model",
"values": [
3
]
},
"wasLoaded": true
}
},
null
],
If it helps I can provide more information.
Ok, there was a bug here with certain entity graphs on the server causing a spurious entityState change when serialized to the client. This should be fixed in v0.74.2 available on the breeze website or via nuget. Please let us know if this corrects your issues.