Je crée une base de données SQLite In Memory pour des tests unitaires :
var connection = new SqliteConnection("DataSource=:memory:");
connection.Open();
try
{
var options = new DbContextOptionsBuilder<BloggingContext>()
.UseSqlite(connection)
.Options;
// Create the schema in the database
using (var context = new BloggingContext(options))
{
context.Database.EnsureCreated();
}
// Run the test against one instance of the context
using (var context = new BloggingContext(options))
{
var service = new BlogService(context);
service.Add("http://sample.com");
}
// Use a separate instance of the context to verify correct data was saved to database
using (var context = new BloggingContext(options))
{
Assert.AreEqual(1, context.Blogs.Count());
Assert.AreEqual("http://sample.com", context.Blogs.Single().Url);
}
}
context.Database.EnsureCreated() ; échoue avec une exception : Message : Microsoft.Data.Sqlite.SqliteException : Erreur SQLite 1 : 'near "MAX" : syntax error'.
Il y a problème github dire : Le problème est que varchar(max) est un type spécifique à SqlServer. L'échafaudage ne devrait pas l'ajouter en tant que type relationnel qui est transmis à la migration dans d'autres fournisseurs, ce qui est susceptible de générer un SQL invalide lors de la migration.
Mais comment puis-je utiliser SQLite in Memory pour les tests unitaires si ma base de données contient de nombreuses colonnes varchar(max) ?