henriksen / LocalDb

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LocalDb

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

More info

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 EF 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 currently supports two approaches.

Raw SqlConnection

Interactions with SqlLocalDB via a SqlConnection.

Full Usage

EntityFramework

Interactions with SqlLocalDB via Entity Framework.

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)

SQL Server Updates

Ensure that the latests SQL Server Cumulative Update is being used.

Simple.LocalDb

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

Icon

Robot designed by Creaticca Creative Agency from The Noun Project.

About

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

License:MIT License


Languages

Language:C# 100.0%