v0.12.1 — entities the application declares
Entities the application declares, rather than the ones that inherit from the right class.
The first release that came from outside. @MBrekhof pointed this tool at an XAF application of 221 entities over a legacy LIMS schema. It found three.
Not a rare shape, either: an application mapped onto tables that already exist rarely derives from BaseObject. The tables bring their own keys, so the project writes its own base class or maps a plain POCO — and EntityAnalyzer was matching class declarations against four XPO-era base type names, none of which such a project will ever use.
What makes that the worst kind of error this project can make is what happens next. The generated AGENTS.md goes on to state that its inventories are complete, and instructs the agent to answer that anything absent does not exist in this application. So the failure is not a gap in a document. It is an agent confidently wrong about which tables exist.
Under EF Core the application already declares what it persists, in the one place that has to be correct for it to run at all: the DbSet<T> properties of its DbContext. That roster is now read, and it needs no compilation and no new heuristic. On the reporter's application, extraction goes from 3 entities to 210 — the remaining 11 being framework tables the DbContext also registers, correctly excluded.
A name is not an identity
Three of the five fixes here were found reviewing that change, and they are all the same rule read in the other direction. A roster of bare names finds the classes a base list misses — and then also finds a DTO that merely shares a name with an entity, every half of a partial class, and a type mentioned in a method body.
So registrations now carry the namespaces they could have been naming: the registering file's usings, its own namespace, and the namespaces enclosing it. That is ordinary C# lookup, the part of it syntax can see. What it cannot see — aliases, using static — finds no class and is dropped, which is the safe direction, and it is written into the code rather than left to be discovered.
The fifth fix is not about names at all. Which half of a partial class won depended on the operating system: NTFS compares file names without case and ext4 by byte, so Shipment.Generated.cs sorts after Shipment.cs on one and before it on the other. CI caught it on Linux while Windows was green. A document that cannot be regenerated identically on two machines is one nobody can diff, which is most of what regenerating it is for.
Full detail in CHANGELOG.md.
Install
dotnet tool install -g XafLogicExplainer.Cli
xaflogic agents --project "C:\MySolution\MyApp.Module"Already installed:
dotnet tool update -g XafLogicExplainer.Cli10 MCP tools · 279 tests · .NET 10 · MIT · no DevExpress licence required