diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetFolderRepository.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetFolderRepository.cs index 632a7d523..52f5f9dfd 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetFolderRepository.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetFolderRepository.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MongoDB.Bson.Serialization; using MongoDB.Driver; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Assets.Repositories; @@ -21,6 +22,8 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets { public sealed partial class MongoAssetFolderRepository : MongoRepositoryBase, IAssetFolderRepository { + private readonly Lazy idField = new Lazy(GetIdField); + public MongoAssetFolderRepository(IMongoDatabase database) : base(database) { @@ -64,7 +67,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets await Collection.Find(x => x.IndexedAppId == appId && !x.IsDeleted && x.ParentId == parentId).Only(x => x.Id) .ToListAsync(); - return assetFolderEntities.Select(x => Guid.Parse(x["_id"].AsString)).ToList(); + return assetFolderEntities.Select(x => Guid.Parse(x[idField.Value].AsString)).ToList(); } } @@ -84,5 +87,10 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets return assetFolderEntity; } } + + private static string GetIdField() + { + return BsonClassMap.LookupClassMap(typeof(MongoAssetFolderEntity)).GetMemberMap(nameof(MongoAssetFolderEntity.Id)).ElementName; + } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs index 82578a00c..0815d928b 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MongoDB.Bson.Serialization; using MongoDB.Driver; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Assets.Repositories; @@ -24,6 +25,8 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets { public sealed partial class MongoAssetRepository : MongoRepositoryBase, IAssetRepository { + private readonly Lazy idField = new Lazy(GetIdField); + public MongoAssetRepository(IMongoDatabase database) : base(database) { @@ -100,7 +103,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets await Collection.Find(BuildFilter(appId, ids)).Only(x => x.Id) .ToListAsync(); - return assetEntities.Select(x => Guid.Parse(x["_id"].AsString)).ToList(); + return assetEntities.Select(x => Guid.Parse(x[idField.Value].AsString)).ToList(); } } @@ -112,7 +115,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets await Collection.Find(x => x.IndexedAppId == appId && !x.IsDeleted && x.ParentId == parentId).Only(x => x.Id) .ToListAsync(); - return assetEntities.Select(x => Guid.Parse(x["_id"].AsString)).ToList(); + return assetEntities.Select(x => Guid.Parse(x[idField.Value].AsString)).ToList(); } } @@ -171,5 +174,10 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets Filter.In(x => x.Id, ids), Filter.Ne(x => x.IsDeleted, true)); } + + private static string GetIdField() + { + return BsonClassMap.LookupClassMap(typeof(MongoAssetEntity)).GetMemberMap(nameof(MongoAssetEntity.Id)).ElementName; + } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryIdsAsync.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryIdsAsync.cs index 0d7800d3a..b751525ea 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryIdsAsync.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryIdsAsync.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MongoDB.Bson.Serialization; using MongoDB.Driver; using Squidex.Infrastructure.MongoDb; using Squidex.Infrastructure.MongoDb.Queries; @@ -19,6 +20,8 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Operations { internal sealed class QueryIdsAsync : OperationBase { + private readonly Lazy idField = new Lazy(GetIdField); + private readonly Lazy schemaIdField = new Lazy(GetSchemaIdField); private static readonly List<(Guid SchemaId, Guid Id)> EmptyIds = new List<(Guid SchemaId, Guid Id)>(); private readonly IAppProvider appProvider; @@ -49,7 +52,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Operations await Collection.Find(filter).Only(x => x.Id, x => x.IndexedSchemaId) .ToListAsync(); - return contentEntities.Select(x => (Guid.Parse(x["_si"].AsString), Guid.Parse(x["_id"].AsString))).ToList(); + return contentEntities.Select(x => (Guid.Parse(x[schemaIdField.Value].AsString), Guid.Parse(x[idField.Value].AsString))).ToList(); } public async Task> DoAsync(Guid appId, Guid schemaId, FilterNode filterNode) @@ -67,7 +70,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Operations await Collection.Find(filter).Only(x => x.Id, x => x.IndexedSchemaId) .ToListAsync(); - return contentEntities.Select(x => (Guid.Parse(x["_si"].AsString), Guid.Parse(x["_id"].AsString))).ToList(); + return contentEntities.Select(x => (Guid.Parse(x[schemaIdField.Value].AsString), Guid.Parse(x[idField.Value].AsString))).ToList(); } public static FilterDefinition BuildFilter(FilterNode? filterNode, Guid schemaId) @@ -85,5 +88,15 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents.Operations return Filter.And(filters); } + + private static string GetIdField() + { + return BsonClassMap.LookupClassMap(typeof(MongoContentEntity)).GetMemberMap(nameof(MongoContentEntity.Id)).ElementName; + } + + private static string GetSchemaIdField() + { + return BsonClassMap.LookupClassMap(typeof(MongoContentEntity)).GetMemberMap(nameof(MongoContentEntity.Id)).ElementName; + } } } \ No newline at end of file diff --git a/backend/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs b/backend/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs index d00c7b140..681dc1884 100644 --- a/backend/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs +++ b/backend/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs @@ -11,6 +11,7 @@ using System.Threading; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; using MongoDB.Bson; +using MongoDB.Bson.Serialization; using MongoDB.Driver; using Squidex.Infrastructure.States; @@ -77,14 +78,6 @@ namespace Squidex.Infrastructure.MongoDb return find.Project(Builders.Projection.Include(include1).Include(include2)); } - public static IFindFluent Only(this IFindFluent find, - Expression> include1, - Expression> include2, - Expression> include3) - { - return find.Project(Builders.Projection.Include(include1).Include(include2).Include(include3)); - } - public static IFindFluent Not(this IFindFluent find, Expression> exclude) { @@ -98,14 +91,6 @@ namespace Squidex.Infrastructure.MongoDb return find.Project(Builders.Projection.Exclude(exclude1).Exclude(exclude2)); } - public static IFindFluent Not(this IFindFluent find, - Expression> exclude1, - Expression> exclude2, - Expression> exclude3) - { - return find.Project(Builders.Projection.Exclude(exclude1).Exclude(exclude2).Exclude(exclude3)); - } - public static async Task UpsertVersionedAsync(this IMongoCollection collection, TKey key, long oldVersion, long newVersion, Func, UpdateDefinition> updater) where T : IVersionedEntity where TKey : notnull { try @@ -131,7 +116,9 @@ namespace Squidex.Infrastructure.MongoDb if (existingVersion != null) { - throw new InconsistentStateException(existingVersion[nameof(IVersionedEntity.Version)].AsInt64, oldVersion, ex); + var versionField = BsonClassMap.LookupClassMap(typeof(T)).GetMemberMap(nameof(IVersionedEntity.Version)).ElementName; + + throw new InconsistentStateException(existingVersion[versionField].AsInt64, oldVersion, ex); } } else