From 62c05349c597951a125737f1e7f005fac16ab59f Mon Sep 17 00:00:00 2001
From: rusamant <82844317+rusamant@users.noreply.github.com>
Date: Thu, 4 Apr 2024 22:17:07 +0000
Subject: [PATCH 1/3] remove dependency on unwanted parts of the
assemblyqualified name for Typename
---
.../Converters/DatabaseObjectConverter.cs | 22 +++++++++++++++++--
.../SerializationDeserializationTests.cs | 6 +++--
2 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs b/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
index 710095620d..c9d35a5021 100644
--- a/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
+++ b/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
@@ -45,8 +45,8 @@ public override void Write(Utf8JsonWriter writer, DatabaseObject value, JsonSeri
// Add TypeName property in DatabaseObject object that we are serializing based on its type. (DatabaseTable, DatabaseView)
// We add this property to differentiate between them in the dictionary. This extra property gets used in deserialization above.
// for example if object is DatabaseTable then we need to add
- // "TypeName": "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
- writer.WriteString(TYPE_NAME, value.GetType().AssemblyQualifiedName);
+ // "TypeName": "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config",
+ writer.WriteString(TYPE_NAME, GetTypeNameFromType(value.GetType()));
// Add other properties of DatabaseObject
foreach (PropertyInfo prop in value.GetType().GetProperties())
@@ -75,5 +75,23 @@ private static Type GetTypeFromName(string typeName)
return type;
}
+
+ ///
+ /// Changes the AssemblyQualified to deseried format
+ /// we cannot use the FullName as during deserialization it throws exception as object not found.
+ ///
+ private static string GetTypeNameFromType(Type type)
+ {
+ // AssemblyQualifiedName for the type looks like :
+ // "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
+ // we donot need version or culture or publickeytoken for serialization or deserialization, we need the first two parts.
+
+ string assemblyQualifiedName = type.AssemblyQualifiedName!;
+ string[] parts = assemblyQualifiedName.Split(',');
+
+ // typename would be : "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config"
+ string typeName = $"{parts[0]},{parts[1]}";
+ return typeName;
+ }
}
}
diff --git a/src/Service.Tests/Unittests/SerializationDeserializationTests.cs b/src/Service.Tests/Unittests/SerializationDeserializationTests.cs
index b3dfd8bcae..e0b125dff7 100644
--- a/src/Service.Tests/Unittests/SerializationDeserializationTests.cs
+++ b/src/Service.Tests/Unittests/SerializationDeserializationTests.cs
@@ -336,7 +336,7 @@ private void InitializeObjects()
///
/// During serialization we add TypeName to the DatabaseObject based on its type. TypeName is the AssemblyQualifiedName for the type.
- /// Example : "TypeName": "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
+ /// Example : "TypeName": "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config",
/// If there is a code refactor which changes the path of this object, the deserialization with old value will fail, as it wont be able to find the object in the location
/// previously defined.
/// Note : Currently this is being used by GraphQL workload, failure of this test case needs to be
@@ -367,7 +367,7 @@ private void TestTypeNameChanges(DatabaseObject databaseobject, string objectNam
// Split TypeName into different parts
// following splits different sections of :
- // "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
+ // "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config"
string[] typeNameSplitParts = typeName.Split(',');
string namespaceString = typeNameSplitParts[0].Trim();
@@ -376,6 +376,8 @@ private void TestTypeNameChanges(DatabaseObject databaseobject, string objectNam
string projectNameString = typeNameSplitParts[1].Trim();
Assert.AreEqual(projectNameString, "Azure.DataApiBuilder.Config");
+
+ Assert.AreEqual(typeNameSplitParts.Length, 2);
}
else
{
From a055740e4b318d029c11162793844fcc31c8be87 Mon Sep 17 00:00:00 2001
From: rusamant <82844317+rusamant@users.noreply.github.com>
Date: Fri, 5 Apr 2024 00:30:49 +0000
Subject: [PATCH 2/3] fix formatting
---
.../MetadataProviders/Converters/DatabaseObjectConverter.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs b/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
index c9d35a5021..26eb631bc6 100644
--- a/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
+++ b/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
@@ -86,7 +86,7 @@ private static string GetTypeNameFromType(Type type)
// "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
// we donot need version or culture or publickeytoken for serialization or deserialization, we need the first two parts.
- string assemblyQualifiedName = type.AssemblyQualifiedName!;
+ string assemblyQualifiedName = type.AssemblyQualifiedName!;
string[] parts = assemblyQualifiedName.Split(',');
// typename would be : "Azure.DataApiBuilder.Config.DatabasePrimitives.DatabaseTable, Azure.DataApiBuilder.Config"
From 1a2c896d55627d15b5a4730a2249665b357d3903 Mon Sep 17 00:00:00 2001
From: rusamant <82844317+rusamant@users.noreply.github.com>
Date: Fri, 5 Apr 2024 00:31:53 +0000
Subject: [PATCH 3/3] update documentation
---
.../MetadataProviders/Converters/DatabaseObjectConverter.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs b/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
index 26eb631bc6..c6e694a394 100644
--- a/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
+++ b/src/Core/Services/MetadataProviders/Converters/DatabaseObjectConverter.cs
@@ -77,7 +77,7 @@ private static Type GetTypeFromName(string typeName)
}
///
- /// Changes the AssemblyQualified to deseried format
+ /// Changes the Type.AssemblyQualifiedName to desired format
/// we cannot use the FullName as during deserialization it throws exception as object not found.
///
private static string GetTypeNameFromType(Type type)