From 5197ee48b513d0d4fc3959927a41caa4e15afc10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Wed, 18 Feb 2026 11:35:37 +0300 Subject: [PATCH] Docs: update Fluent API examples and add image Update low-code Fluent API docs: add docs/en/images/quick-look.png and refactor examples to use DynamicEntityBase for entities. Remove the separate assembly registration step and replace the ConfigureServices sample with a Low-Code initializer (MyAppLowCodeInitializer) that uses AsyncOneTimeRunner and an async InitializeAsync which calls DynamicModelManager.Instance.InitializeAsync(). Also adjust step numbering and small samples to reflect these API changes (add server-only/internal property, set UI descriptors, etc.). --- docs/en/images/quick-look.png | Bin 0 -> 15226 bytes docs/en/low-code/fluent-api.md | 83 ++++++++++++++++----------------- 2 files changed, 41 insertions(+), 42 deletions(-) create mode 100644 docs/en/images/quick-look.png diff --git a/docs/en/images/quick-look.png b/docs/en/images/quick-look.png new file mode 100644 index 0000000000000000000000000000000000000000..50b5725d4e0216e1d2f80eed82e1c8d8e579d57c GIT binary patch literal 15226 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 - { - entity.DefaultDisplayPropertyName = "Name"; + private static readonly AsyncOneTimeRunner Runner = new(); - var priceProperty = entity.AddOrGetProperty("Price"); - priceProperty.AsRequired(); - priceProperty.UI = new EntityPropertyUIDescriptor - { - DisplayName = "Unit Price", - CreationFormAvailability = EntityPropertyUIFormAvailability.Available - }; + public static async Task InitializeAsync() + { + await Runner.RunAsync(async () => + { + AbpDynamicEntityConfig.EntityConfigurations.Configure( + "MyApp.Products.Product", + entity => + { + entity.DefaultDisplayPropertyName = "Name"; + + var priceProperty = entity.AddOrGetProperty("Price"); + priceProperty.AsRequired(); + priceProperty.UI = new EntityPropertyUIDescriptor + { + DisplayName = "Unit Price", + CreationFormAvailability = EntityPropertyUIFormAvailability.Available + }; + + entity.AddOrGetProperty("InternalNotes").AsServerOnly(); + } + ); - entity.AddOrGetProperty("InternalNotes").AsServerOnly(); - } - ); + await DynamicModelManager.Instance.InitializeAsync(); + }); + } } ```` @@ -439,7 +438,7 @@ public enum OrderStatus // Customer entity [DynamicEntity] [DynamicEntityUI(PageTitle = "Customers")] -public class Customer +public class Customer : DynamicEntityBase { [DynamicPropertyUnique] public string Name { get; set; } @@ -457,7 +456,7 @@ public class Customer // Product entity [DynamicEntity] [DynamicEntityUI(PageTitle = "Products")] -public class Product +public class Product : DynamicEntityBase { [DynamicPropertyUnique] public string Name { get; set; } @@ -478,7 +477,7 @@ public class Product } }" )] -public class Order +public class Order : DynamicEntityBase { [DynamicForeignKey("MyApp.Customers.Customer", "Name", ForeignAccess.Edit)] public Guid CustomerId { get; set; } @@ -489,7 +488,7 @@ public class Order } [DynamicEntity(Parent = "MyApp.Orders.Order")] -public class OrderLine +public class OrderLine : DynamicEntityBase { [DynamicForeignKey("MyApp.Products.Product", "Name")] public Guid ProductId { get; set; }