• Stars
    star
    148
  • Rank 248,711 (Top 5 %)
  • Language
    C#
  • License
    MIT License
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Provides a wrapper around SqlLocalDB to simplify running tests or samples that require a SQL Server Database

LocalDb

Build status NuGet Status NuGet Status NuGet Status

Provides a wrapper around SqlLocalDB to simplify running tests against Entity Framework or a raw SQL Database.

SqlLocalDB is only supported on Windows

Contents

NuGet packages

Why

Goals:

  • Have a isolated SQL Server Database for each unit test method.
  • Does not overly impact performance.
  • Results in a running SQL Server Database that can be accessed via SQL Server Management Studio (or other tooling) to diagnose issues when a test fails.

Why not SQLite

Why not SQL Express or full SQL Server

  • Control over file location. SqlLocalDB connections support AttachDbFileName property, which allows developers to specify a database file location. SqlLocalDB will attach the specified database file and the connection will be made to it. This allows database files to be stored in a temporary location, and cleaned up, as required by tests.
  • No installed service is required. Processes are started and stopped automatically when needed.
  • Automatic cleanup. A few minutes after the last connection to this process is closed the process shuts down.
  • Full control of instances using the Command-Line Management Tool: SqlLocalDB.exe.

Why not EntityFramework InMemory

  • Difficult to debug the state. When debugging a test, or looking at the resultant state, it is helpful to be able to interrogate the Database using tooling
  • InMemory is implemented with shared mutable state between instance. This results in strange behaviors when running tests in parallel, for example when creating keys.
  • InMemory is not intended to be an alternative to SqlServer, and as such it does not support the full suite of SqlServer features. For example:

See the official guidance: InMemory is not a relational database.

References:

Usage

This project supports several approaches.

Raw SqlConnection

Interactions with SqlLocalDB via a SqlConnection.

Full Usage

EntityFramework Classic

Interactions with SqlLocalDB via Entity Framework Classic.

Full Usage

EntityFramework Core

Interactions with SqlLocalDB via Entity Framework Core.

Full Usage

Debugging

To connect to a SqlLocalDB instance using SQL Server Management Studio use a server name with the following convention (LocalDb)\INSTANCENAME.

So for a instance named MyDb the server name would be (LocalDb)\MyDb. Note that the name will be different if a name or instanceSuffix have been defined for SqlInstance.

The server name will be written to Trace.WriteLine when a SqlInstance is constructed. It can be accessed programmatically from SqlInstance.ServerName. See Logging.

SqlLocalDb

The SqlLocalDb Utility (SqlLocalDB.exe) is a command line tool to enable users and developers to create and manage an instance of SqlLocalDB.

Useful commands:

  • sqllocaldb info: list all instances
  • sqllocaldb create InstanceName: create a new instance
  • sqllocaldb start InstanceName: start an instance
  • sqllocaldb stop InstanceName: stop an instance
  • sqllocaldb delete InstanceName: delete an instance (this does not delete the file system data for the instance)

ReSharper Test Runner

The ReSharper Test Runner has a feature that detects spawned processes, and prompts if they do not shut down when a test ends. This is problematic when using SqlLocalDB since the Sql Server process continues to run:

To avoid this error spawned processes can be ignored:

Credits

SqlLocalDB API code sourced from https://github.com/skyguy94/Simple.LocalDb

Icon

Robot designed by Creaticca Creative Agency from The Noun Project.

More Repositories

1

GraphQL.EntityFramework

Adds EntityFramework Core IQueryable support to GraphQL
C#
357
star
2

WinDebloat

A dotnet tool that removes the bloat in Windows
C#
303
star
3

NaughtyStrings

Provides a strong typed .NET API for the Big List of Naughty Strings https://github.com/minimaxir/big-list-of-naughty-strings
C#
197
star
4

MarkdownSnippets

Extracts snippets from code files and merges them into markdown documents.
C#
159
star
5

XunitContext

Extends xUnit to expose extra context and simplify logging
C#
129
star
6

Polyfill

Source only package that exposes newer .net and C# features to older runtimes.
C#
93
star
7

WaffleGenerator

Produces text which, on first glance, looks like real, ponderous, prose; replete with clichΓ©s.
C#
84
star
8

CountryData

Provides a .net wrapper around the GeoNames Data
C#
64
star
9

Cymbal

An MSBuild Task to enable exception line numbers for references in a deployed app
C#
44
star
10

SetStartupProjects

Setting Visual Studio startup projects by hacking the suo
C#
42
star
11

GraphQL.Validation

Add FluentValidation support to GraphQL.net
C#
40
star
12

Replicant

A wrapper for HttpClient that caches to disk. Cached files, over the max specified, are deleted based on the last access times.
C#
31
star
13

PandocNet

Conversion of documents in .net via Pandoc.
C#
23
star
14

GitHubSync

A tool to help synchronizing specific files and folders across GitHub hosted repositories
C#
23
star
15

PackageUpdate

A dotnet tool that updates packages for all solutions in a directory.
C#
20
star
16

Delta

An opinionated approach to implementing a 304 Not Modified
C#
19
star
17

GraphQL.Attachments

Provides access to a HTTP stream in GraphQL
C#
17
star
18

Timestamp

Adds a build timestamp to an assembly.
C#
16
star
19

NodaTime.Bogus

Add support for NodaTime to Bogus.
C#
13
star
20

SimpleInfoName

Generates simple names for *Infos (types, parameters, properties, fields, and methods)
C#
13
star
21

SeqProxy

Enables writing seq logs by proxying requests through an ASP.NET Controller or Middleware.
C#
13
star
22

NullabilityInfo

Exposes top-level nullability information from reflection
C#
11
star
23

ExtendedFluentValidation

Extends FluentValidation with some more opinionated rules.
C#
8
star
24

Argon

Argon is a JSON framework for .NET. It is a hard fork of Newtonsoft.Json.
C#
8
star
25

ProjectDefaults

Pascal
3
star
26

scratch

C#
3
star
27

RoboBogus

C#
3
star
28

GitModTimes

C#
2
star
29

OssIndexClient

A .net client for OSSIndex (https://ossindex.sonatype.org/)
C#
2
star
30

.github

1
star
31

AsposeHelpers

C#
1
star
32

GitHubSync.TestRepository

1
star