diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/BuildingTwin.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/BuildingTwin.json
index ba5291c2b571..085f3ca3d530 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/BuildingTwin.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/BuildingTwin.json
@@ -1,6 +1,6 @@
{
"$metadata": {
- "$model": "dtmi:samples:Building;1"
+ "$model": "dtmi:com:samples:Building;1"
},
"AverageTemperature": 68,
"TemperatureUnit": "Celsius"
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/FloorTwin.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/FloorTwin.json
index f9a08edfd8bb..acbe3c91c0aa 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/FloorTwin.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/FloorTwin.json
@@ -1,6 +1,6 @@
{
"$metadata": {
- "$model": "dtmi:samples:Floor;1"
+ "$model": "dtmi:com:samples:Floor;1"
},
"AverageTemperature": 75
}
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/HVACTwin.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/HVACTwin.json
index 49b4ad617232..75c0ba9a8e9f 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/HVACTwin.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/HVACTwin.json
@@ -1,6 +1,6 @@
{
"$metadata": {
- "$model": "dtmi:samples:HVAC;1"
+ "$model": "dtmi:com:samples:HVAC;1"
},
"Efficiency": 94,
"TargetTemperature": 72,
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/RoomTwin.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/RoomTwin.json
index bc75da2917f4..e9ad94f496e9 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/RoomTwin.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/DigitalTwins/RoomTwin.json
@@ -1,6 +1,6 @@
{
"$metadata": {
- "$model": "dtmi:samples:Room;1"
+ "$model": "dtmi:com:samples:Room;1"
},
"Temperature": 80,
"Humidity": 25,
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Building.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Building.json
index 1a032d636473..b9c7e4f674a5 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Building.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Building.json
@@ -1,5 +1,5 @@
{
- "@id": "dtmi:samples:Building;1",
+ "@id": "dtmi:com:samples:Building;1",
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "Building",
@@ -7,7 +7,7 @@
{
"@type": "Relationship",
"name": "has",
- "target": "dtmi:samples:Floor;1",
+ "target": "dtmi:com:samples:Floor;1",
"properties": [
{
"@type": "Property",
@@ -19,7 +19,7 @@
{
"@type": "Relationship",
"name": "isEquippedWith",
- "target": "dtmi:samples:HVAC;1"
+ "target": "dtmi:com:samples:HVAC;1"
},
{
"@type": "Property",
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Floor.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Floor.json
index fe4ea891228b..b7765e08bf0f 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Floor.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Floor.json
@@ -1,5 +1,5 @@
{
- "@id": "dtmi:samples:Floor;1",
+ "@id": "dtmi:com:samples:Floor;1",
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "Floor",
@@ -7,7 +7,7 @@
{
"@type": "Relationship",
"name": "contains",
- "target": "dtmi:samples:Room;1"
+ "target": "dtmi:com:samples:Room;1"
},
{
"@type": "Property",
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/HVAC.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/HVAC.json
index 35186f130a95..821c5aa20422 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/HVAC.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/HVAC.json
@@ -1,5 +1,5 @@
{
- "@id": "dtmi:samples:HVAC;1",
+ "@id": "dtmi:com:samples:HVAC;1",
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "HVAC",
@@ -22,7 +22,7 @@
{
"@type": "Relationship",
"name": "controlsTemperature",
- "target": "dtmi:samples:Floor;1"
+ "target": "dtmi:com:samples:Floor;1"
}
]
}
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Room.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Room.json
index a6c2dfe6bd78..9389f44a61af 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Room.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Room.json
@@ -1,5 +1,5 @@
{
- "@id": "dtmi:samples:Room;1",
+ "@id": "dtmi:com:samples:Room;1",
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "Room",
@@ -27,7 +27,7 @@
{
"@type": "Component",
"name": "wifiAccessPoint",
- "schema": "dtmi:samples:Wifi;1"
+ "schema": "dtmi:com:samples:Wifi;1"
}
]
}
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Wifi.json b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Wifi.json
index a2b07b484334..62337d212cb5 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Wifi.json
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/DTDL/Models/Wifi.json
@@ -1,5 +1,5 @@
{
- "@id": "dtmi:samples:Wifi;1",
+ "@id": "dtmi:com:samples:Wifi;1",
"@type": "Interface",
"@context": "dtmi:dtdl:context;2",
"displayName": "Wifi",
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/ModelLifecycleSamples.cs b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/ModelLifecycleSamples.cs
index bb46b09d8e6d..95ff783a461b 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/ModelLifecycleSamples.cs
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/ModelLifecycleSamples.cs
@@ -101,5 +101,25 @@ public async Task RunSamplesAsync(DigitalTwinsClient client)
#endregion Snippet:DigitalTwinsSampleDeleteModel
}
+
+ ///
+ /// Try to delete a model, but don't fail if the model does not exist. Useful in setting up or tearing down after running a sample if the
+ /// sample re-uses the same model Id each time
+ ///
+ /// The client to use when deleting the model
+ /// The id of the model to delete
+ /// An empty task once the model has been deleted.
+ public static async Task TryDeleteModelAsync(DigitalTwinsClient client, string modelId)
+ {
+ try
+ {
+ Console.WriteLine($"Deleting model Id '{modelId}' if it exists.");
+ await client.DeleteModelAsync(modelId);
+ }
+ catch (RequestFailedException ex) when (ex.Status == 404)
+ {
+ // Model did not exist yet, and that's fine
+ }
+ }
}
}
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/RelationshipSamples.cs b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/RelationshipSamples.cs
index 416f0c69646d..910794aaf70b 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/RelationshipSamples.cs
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/RelationshipSamples.cs
@@ -6,6 +6,7 @@
using System.Text.Json;
using System.Threading.Tasks;
using Azure.DigitalTwins.Core.Serialization;
+using Azure.DigitalTwins.Samples;
using static Azure.DigitalTwins.Core.Samples.SampleLogger;
namespace Azure.DigitalTwins.Core.Samples
@@ -21,36 +22,40 @@ public async Task RunSamplesAsync(DigitalTwinsClient client)
// Despite not being a good code practice, this prevents code snippets from being out of context for the user when making API calls that accept Ids as parameters.
PrintHeader("RELATIONSHIP SAMPLE");
+ string sampleBuildingModelId = "dtmi:com:samples:SampleBuilding;1";
+ string sampleFloorModelId = "dtmi:com:samples:SampleFloor;1";
+ await ModelLifecycleSamples.TryDeleteModelAsync(client, sampleBuildingModelId);
+ await ModelLifecycleSamples.TryDeleteModelAsync(client, sampleFloorModelId);
// Create a building digital twin model.
string buildingModelPayload = SamplesConstants.TemporaryModelWithRelationshipPayload
- .Replace(SamplesConstants.ModelId, "dtmi:samples:SampleBuilding;1")
+ .Replace(SamplesConstants.RelationshipTargetModelId, sampleFloorModelId)
+ .Replace(SamplesConstants.ModelId, sampleBuildingModelId)
.Replace(SamplesConstants.ModelDisplayName, "Building")
- .Replace(SamplesConstants.RelationshipName, "contains")
- .Replace(SamplesConstants.RelationshipTargetModelId, "dtmi:samples:SampleFloor;1");
+ .Replace(SamplesConstants.RelationshipName, "contains");
await client.CreateModelsAsync(
new[]
{
buildingModelPayload
});
- Console.WriteLine($"Created model 'dtmi:samples:SampleBuilding;1'.");
+ Console.WriteLine($"Created model '{sampleBuildingModelId}'.");
// Create a floor digital twin model.
string floorModelPayload = SamplesConstants.TemporaryModelWithRelationshipPayload
- .Replace(SamplesConstants.ModelId, "dtmi:samples:SampleFloor;1")
+ .Replace(SamplesConstants.RelationshipTargetModelId, sampleBuildingModelId)
+ .Replace(SamplesConstants.ModelId, sampleFloorModelId)
.Replace(SamplesConstants.ModelDisplayName, "Floor")
- .Replace(SamplesConstants.RelationshipName, "containedIn")
- .Replace(SamplesConstants.RelationshipTargetModelId, "dtmi:samples:SampleBuilding;1");
+ .Replace(SamplesConstants.RelationshipName, "containedIn");
await client.CreateModelsAsync(new[] { floorModelPayload });
- Console.WriteLine($"Created model 'dtmi:samples:SampleFloor;1.'");
+ Console.WriteLine($"Created model '{sampleFloorModelId}'");
// Create a building digital twin.
var buildingDigitalTwin = new BasicDigitalTwin
{
Id = "buildingTwinId",
- Metadata = { ModelId = "dtmi:samples:SampleBuilding;1" }
+ Metadata = { ModelId = sampleBuildingModelId }
};
string buildingDigitalTwinPayload = JsonSerializer.Serialize(buildingDigitalTwin);
@@ -61,7 +66,7 @@ await client.CreateModelsAsync(
var floorDigitalTwin = new BasicDigitalTwin
{
Id = "floorTwinId",
- Metadata = { ModelId = "dtmi:samples:SampleFloor;1" }
+ Metadata = { ModelId = sampleFloorModelId }
};
string floorDigitalTwinPayload = JsonSerializer.Serialize(floorDigitalTwin);
@@ -197,8 +202,8 @@ await client.CreateModelsAsync(
try
{
- await client.DeleteModelAsync("dtmi:samples:SampleBuilding;1");
- await client.DeleteModelAsync("dtmi:samples:SampleFloor;1");
+ await client.DeleteModelAsync(sampleBuildingModelId);
+ await client.DeleteModelAsync(sampleFloorModelId);
}
catch (RequestFailedException ex)
{
diff --git a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/SamplesConstants.cs b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/SamplesConstants.cs
index 3a9b5e1150d4..f646bed01ffc 100644
--- a/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/SamplesConstants.cs
+++ b/sdk/digitaltwins/Azure.DigitalTwins.Core/samples/DigitalTwinsClientSample/SamplesConstants.cs
@@ -8,27 +8,27 @@ public static class SamplesConstants
///
/// Room model Id
///
- public const string RoomModelId = "dtmi:samples:Room;1";
+ public const string RoomModelId = "dtmi:com:samples:Room;1";
///
/// WiFi model Id
///
- public const string WifiModelId = "dtmi:samples:Wifi;1";
+ public const string WifiModelId = "dtmi:com:samples:Wifi;1";
///
/// Building model Id
///
- public const string BuildingModelId = "dtmi:samples:Building;1";
+ public const string BuildingModelId = "dtmi:com:samples:Building;1";
///
/// Floor model Id
///
- public const string FloorModelId = "dtmi:samples:Floor;1";
+ public const string FloorModelId = "dtmi:com:samples:Floor;1";
///
/// HVAC model Id
///
- public const string HvacModelId = "dtmi:samples:HVAC;1";
+ public const string HvacModelId = "dtmi:com:samples:HVAC;1";
///
/// Placeholder for model Id in the temporary payload.
@@ -43,12 +43,12 @@ public static class SamplesConstants
///
/// Temporary model Id prefix
///
- public const string TemporaryModelPrefix = "dtmi:samples:TempModel;";
+ public const string TemporaryModelPrefix = "dtmi:com:samples:TempModel;";
///
/// Temporary component model Id prefix
///
- public const string TemporaryComponentModelPrefix = "dtmi:samples:ComponentModel;";
+ public const string TemporaryComponentModelPrefix = "dtmi:com:samples:ComponentModel;";
///
/// Placeholder for model display name in the temporary payload.