This sample demonstrates organizing generated entities by database schema using the use-schema-folders-preview and use-schema-namespaces-preview configuration options.
Schema-based organization is useful when:
- Your database has multiple schemas (e.g.,
dbo,sales,inventory,audit) - You want to group related entities in the file system
- You want schema-based namespaces to match your database structure
- You're working with a large database where flat organization becomes unwieldy
This sample uses three schemas:
Database
├── dbo
│ └── Customer
├── sales
│ ├── Order
│ └── OrderItem
└── inventory
├── Product
└── Warehouse
{
"file-layout": {
"output-path": "Models",
"use-schema-folders-preview": true,
"use-schema-namespaces-preview": true
}
}| Option | Effect |
|---|---|
use-schema-folders-preview |
Creates subdirectories per schema: Models/dbo/, Models/sales/, etc. |
use-schema-namespaces-preview |
Adds schema to namespace: EntityFrameworkCoreProject.Models.Sales |
EntityFrameworkCoreProject/
└── obj/efcpt/Generated/
└── Models/
├── dbo/
│ └── Customer.g.cs
├── sales/
│ ├── Order.g.cs
│ └── OrderItem.g.cs
└── inventory/
├── Product.g.cs
└── Warehouse.g.cs
With use-schema-namespaces-preview: true:
// Models/dbo/Customer.g.cs
namespace EntityFrameworkCoreProject.Models.Dbo;
public partial class Customer { ... }// Models/sales/Order.g.cs
namespace EntityFrameworkCoreProject.Models.Sales;
public partial class Order { ... }// Models/inventory/Product.g.cs
namespace EntityFrameworkCoreProject.Models.Inventory;
public partial class Product { ... }dotnet buildusing EntityFrameworkCoreProject.Models.Dbo;
using EntityFrameworkCoreProject.Models.Sales;
using EntityFrameworkCoreProject.Models.Inventory;
// Entities from different schemas are in different namespaces
var customer = new Customer { Name = "Acme Corp" };
var order = new Order { CustomerId = customer.Id };
var product = new Product { Name = "Widget", Sku = "WDG-001" };Models/
├── Customer.g.cs # namespace: EntityFrameworkCoreProject.Models
├── Order.g.cs # namespace: EntityFrameworkCoreProject.Models
├── OrderItem.g.cs # namespace: EntityFrameworkCoreProject.Models
├── Product.g.cs # namespace: EntityFrameworkCoreProject.Models
└── Warehouse.g.cs # namespace: EntityFrameworkCoreProject.Models
Models/
├── dbo/
│ └── Customer.g.cs # namespace: EntityFrameworkCoreProject.Models.Dbo
├── sales/
│ ├── Order.g.cs # namespace: EntityFrameworkCoreProject.Models.Sales
│ └── OrderItem.g.cs # namespace: EntityFrameworkCoreProject.Models.Sales
└── inventory/
├── Product.g.cs # namespace: EntityFrameworkCoreProject.Models.Inventory
└── Warehouse.g.cs # namespace: EntityFrameworkCoreProject.Models.Inventory
- Use with renaming - Combine with
efcpt.renaming.jsonto setUseSchemaName: falsefor thedboschema if you don't want "Dbo" in namespaces - Large databases - This is especially useful for databases with 50+ tables across multiple schemas
- Team organization - Schema folders can map to team ownership boundaries