What Is POCO DataSet?

POCO DataSet is a lightweight, modern, and extensible tabular data model for .NET applications. It provides a clean, POCO-based alternative to System.Data.DataSet, without legacy constraints, hidden behaviors, or heavy dependencies.

Why POCO DataSet exists

POCO DataSet was created to solve a recurring gap in .NET applications: the need to move structured, tabular data between layers without dragging along the complexity of an ORM or the legacy behavior of System.Data.DataSet.

Many applications need a neutral, metadata-rich data container - something that can represent tables, rows, and schema, serialize cleanly, and remain independent of UI frameworks, databases, and persistence models.

How it differs from System.Data.DataSet

The POCO DataSet mental model

DataSet

A DataSet acts as the root container for related DataTables. Tables are stored under unique names, allowing structured data to be grouped and transported together. The DataSet does not impose relationships or behaviors—keeping the design clean, neutral, and purpose-driven.

DataTable

A DataTable consists of two main parts:

This design makes DataTables ideal for dynamic UI rendering, metadata-driven forms, and rule-based engines.

DataRow

A DataRow represents one logical row of data. Values are stored in typed structures matching the schema, providing predictable access by column name and reducing runtime errors.

ColumnMetadata

ColumnMetadata defines a table’s schema, including:

This metadata-driven structure enables UI frameworks, service layers, and rule engines to make dynamic decisions based on schema rather than hard-coded models.

One Table, Many Contracts

A POCO DataTable is not limited to one object model. The table name remains a human-readable marker that explains what kind of data the table carries, but the same physical row can be viewed through different interface contracts.

This is especially useful when a table carries aggregated business data. A search result, transition context, dashboard result, or service response may combine columns originating from several database tables. Instead of creating several DTOs and copying values between them, consuming code can project the same row into the interface it needs at that moment.

In other words, POCO DataSet supports one table, many contracts, and zero remapping. The data is transported once, while different layers or use cases can interpret the relevant parts through their own interfaces. See "One Table, Many Contracts" page in the "POCO DataSet Concepts" section for a dedicated explanation of interface projections over aggregated data.

Schema and Data Separation

POCO DataSet treats schema and data as separate but related concepts. This allows scenarios such as:

Intended Use Cases