<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://trysil.lastrucci.net/</id><title>Trysil</title><subtitle>Tutorials, deep dives, and release notes for Trysil — an ORM framework for Delphi.</subtitle> <updated>2026-06-12T15:45:25+02:00</updated> <author> <name>David Lastrucci</name> <uri>https://trysil.lastrucci.net/</uri> </author><link rel="self" type="application/atom+xml" href="https://trysil.lastrucci.net/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://trysil.lastrucci.net/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 David Lastrucci </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>One codebase, many databases: the Trysil driver abstraction</title><link href="https://trysil.lastrucci.net/posts/one-codebase-many-databases-the-trysil-driver-abstraction/" rel="alternate" type="text/html" title="One codebase, many databases: the Trysil driver abstraction" /><published>2026-06-07T08:33:00+02:00</published> <updated>2026-06-09T00:01:18+02:00</updated> <id>https://trysil.lastrucci.net/posts/one-codebase-many-databases-the-trysil-driver-abstraction/</id> <content type="text/html" src="https://trysil.lastrucci.net/posts/one-codebase-many-databases-the-trysil-driver-abstraction/" /> <author> <name>David Lastrucci</name> </author> <category term="Design Notes" /> <summary>Delphi has FireDAC. FireDAC already talks to SQLite, PostgreSQL, Firebird, SQL Server, MySQL, Oracle, and a handful of others. If connectivity is a solved problem, why does Trysil need a driver layer at all? The answer is that connectivity is not the problem. SQL generation is. Every database disagrees with every other one on the details that matter to an ORM: How do you fetch a row by pri...</summary> </entry> <entry><title>Trysil Expert: design your model without writing code</title><link href="https://trysil.lastrucci.net/posts/trysil-expert-design-your-model-without-writing-code/" rel="alternate" type="text/html" title="Trysil Expert: design your model without writing code" /><published>2026-06-04T22:18:00+02:00</published> <updated>2026-06-12T15:44:54+02:00</updated> <id>https://trysil.lastrucci.net/posts/trysil-expert-design-your-model-without-writing-code/</id> <content type="text/html" src="https://trysil.lastrucci.net/posts/trysil-expert-design-your-model-without-writing-code/" /> <author> <name>David Lastrucci</name> </author> <category term="Tutorials" /> <summary>Trysil is code-first. You write a plain Delphi class, decorate it with [TTable], [TColumn], [TPrimaryKey] and the rest, and the framework does the mapping. That’s the model you’ve seen in every post on this blog. But there’s a second way in, and it ships in the box: Trysil Expert, a visual designer that lives inside the IDE. You draw your entities and columns in a dialog, and the Expert genera...</summary> </entry> <entry><title>Change tracking and soft delete in six attributes</title><link href="https://trysil.lastrucci.net/posts/change-tracking-and-soft-delete-in-six-attributes/" rel="alternate" type="text/html" title="Change tracking and soft delete in six attributes" /><published>2026-05-24T07:47:00+02:00</published> <updated>2026-05-24T07:47:00+02:00</updated> <id>https://trysil.lastrucci.net/posts/change-tracking-and-soft-delete-in-six-attributes/</id> <content type="text/html" src="https://trysil.lastrucci.net/posts/change-tracking-and-soft-delete-in-six-attributes/" /> <author> <name>David Lastrucci</name> </author> <category term="Deep Dives" /> <summary>Every application eventually needs the same four things on its important tables: when was this row created, by whom, when was it last updated, by whom. Some applications also want a fifth and sixth: don’t actually delete rows — flag them, and record when and by whom they were flagged. This is boilerplate. It’s the same six columns on a hundred tables, the same six assignments in a hundred serv...</summary> </entry> <entry><title>Filtering done right: from WHERE strings to TTFilterBuilder</title><link href="https://trysil.lastrucci.net/posts/filtering-done-right-from-where-strings-to-ttfilterbuilder/" rel="alternate" type="text/html" title="Filtering done right: from WHERE strings to TTFilterBuilder" /><published>2026-05-10T05:12:00+02:00</published> <updated>2026-05-10T05:12:00+02:00</updated> <id>https://trysil.lastrucci.net/posts/filtering-done-right-from-where-strings-to-ttfilterbuilder/</id> <content type="text/html" src="https://trysil.lastrucci.net/posts/filtering-done-right-from-where-strings-to-ttfilterbuilder/" /> <author> <name>David Lastrucci</name> </author> <category term="Tutorials" /> <summary>In the first post we fetched every row with SelectAll&amp;lt;TPerson&amp;gt;. That’s fine when the table has ten rows. At ten thousand, it isn’t. This post walks through the three ways Trysil lets you filter, in order of increasing power: A TTFilter with a raw WHERE string — dead simple, good for one-off queries. Parameters on that same filter — same simplicity, no SQL injection. TTFilterBuild...</summary> </entry> <entry><title>The Road to Trysil</title><link href="https://trysil.lastrucci.net/posts/the-road-to-trysil/" rel="alternate" type="text/html" title="The Road to Trysil" /><published>2026-05-05T21:51:00+02:00</published> <updated>2026-05-05T21:51:00+02:00</updated> <id>https://trysil.lastrucci.net/posts/the-road-to-trysil/</id> <content type="text/html" src="https://trysil.lastrucci.net/posts/the-road-to-trysil/" /> <author> <name>David Lastrucci</name> </author> <category term="Design Notes" /> <summary>I’d wanted to write an ORM since the .NET 2.0 days — though back then I didn’t even know what the word meant. The platform had everything you needed: attributes, generics, reflection. The pieces fit together — you could picture, in your head, a tool that read your classes, mapped them to tables, and gave you a typed API to talk to a database. I never wrote it. Back then every line of code tha...</summary> </entry> </feed>
