private ResourceType AddDocumentType(MongoContext context, string collectionName, BsonDocument document, ResourceTypeKind resourceTypeKind)
{
var collectionType = resourceTypeKind == ResourceTypeKind.EntityType
? this.instanceMetadataCache.AddEntityType(collectionName)
: this.instanceMetadataCache.AddComplexType(collectionName);
bool hasObjectId = false;
if (document != null)
{
foreach (var element in document.Elements)
{
RegisterResourceProperty(context, collectionType, element);
if (IsObjectId(element))
hasObjectId = true;
}
}
if (!hasObjectId)
{
if (resourceTypeKind == ResourceTypeKind.EntityType)
{
this.instanceMetadataCache.AddKeyProperty(collectionType, MappedObjectIdName, MappedObjectIdType);
}
AddProviderType(collectionName, ProviderObjectIdName, BsonObjectId.Empty, true);
}
if (resourceTypeKind == ResourceTypeKind.EntityType)
this.instanceMetadataCache.AddResourceSet(collectionName, collectionType);
return collectionType;
}