Entity Framework Core
Design, tune, or review EF Core data access with proper modeling, migrations, query translation, performance, and lifetime management for modern .NET applications.
dotnet skills install entity-framework-core
Use Sep for high-performance separated-value parsing and writing in .NET, including delimiter inference, explicit parser/writer options, and low-allocation row/column workflows.
flowchart LR
A[Input source: file/text/stream] --> B[Sep.Reader or Sep.New(...).Reader]
B --> C[SepReaderOptions]
C --> D[Rows -> Cols -> Span/Parse]
D --> E[Transform and validate]
E --> F[SepWriter via SepWriterOptions]
F --> G[To file/text output]
- header present or no header - separator known (;, ,, tab, custom) or infer from first row - row/column quoting rules
Sep.Reader(...) and explicit options only where needed:- Sep.Reader() for inferred separator from header-like first row - Sep.New(',').Reader(...) for explicit separator mode - Sep.Reader(o => o with { HasHeader = false }) if header is absent
ReadOnlySpan<char> first, convert only when needed.reader.Spec.Writer() when you need the same separator/culture as input.Sep.Writer(...) and SepWriterOptions (WriteHeader, Escape, DisableColCountCheck).await foreach over async reader rows.ParallelEnumerate for CPU-heavy transformations only after benchmarking single-threaded baseline.using var reader = Sep.Reader(o => o with
{
HasHeader = true,
Unescape = true,
Trim = SepTrim.Both
}).FromText(data);
foreach (var row in reader)
{
var id = row["Id"].Parse<int>();
var name = row[1].ToString();
// process row
}
using var reader = Sep.Reader().FromFile("input.csv");
using var writer = reader.Spec.Writer().ToFile("output.csv");
foreach (var row in reader)
{
using var writeRow = writer.NewRow(row);
writeRow["Amount"].Format(row["Amount"].Parse<double>() * 1.2);
}
var text = "A;B\n1;hello\n";
using var reader = await Sep.Reader().FromTextAsync(text);
await using var writer = reader.Spec.Writer().ToText();
await foreach (var row in reader)
{
await using var writeRow = writer.NewRow(row);
var normalized = row["B"].ToString().ToUpperInvariant();
writeRow["B"].Set(normalized);
}
- default HasHeader = true - query by name: row["ColName"]
- HasHeader = false - use index-based access: row[0], row[1]
- start writer with reader.Spec.Writer() to preserve inference and formatting contract
- keep default buffer + culture unless profiling proves a need to tune
dotnet add package Sep installs correctly and project compilesDesign, tune, or review EF Core data access with proper modeling, migrations, query translation, performance, and lifetime management for modern .NET applications.
dotnet skills install entity-framework-core
Maintain or migrate EF6-based applications with realistic guidance on what to keep, what to modernize, and when EF Core is or is not the right next step.
dotnet skills install entity-framework6
Use ManagedCode.MarkItDown when a .NET application needs deterministic document-to-Markdown conversion for ingestion, indexing, summarization, or content-processing workflows.
dotnet skills install managedcode-markitdown