Я пытаюсь сделать очень простой отдых API для начинающих. Я создал локальный файл sqlite с помощью инструмента, и он работает. Теперь я хочу написать модульный тест для базы данных.
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace dz1
{
[Table("User")]
public class User
{
[Key]
[Column]
public string Name { get; set; }
[Column]
public string Address { get; set; }
[Column]
public int Age { get; set; }
}
[Table("News")]
public class News
{
[Key]
[Column]
public string Title { get; set; }
[Column]
public string Content { get; set; }
[Column]
[ForeignKey("User")]
public string Author { get; set; }
}
public class MyContext : DbContext
{
private readonly string _connectionString;
public MyContext()
{
this._connectionString = "DataSource=./mydb.db";
}
public MyContext(string connectionString)
{
this._connectionString = connectionString;
}
public DbSet<User> Users { get; set; }
public DbSet<News> News { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(_connectionString);
}
}
}
и код моего модульного теста:
using System;
using System.Linq;
using dz1;
using Xunit;
namespace ApiTest
{
public class UnitTest1
{
[Fact]
public void Test1()
{
var ctx = new MyContext("DataSource=:memory:");
ctx.Database.EnsureDeleted();
ctx.Database.EnsureCreated();
var u = new User();
u.Name = "Mirko";
u.Address = "Tamo 2";
u.Age = 101;
ctx.Users.Add(u);
ctx.SaveChanges();
Assert.True(ctx.Users.ToList().First().Name == "Mirko");
}
}
}
Я прочитал в интернете, что EnsureCreated должно быть достаточно для создания таблицв базе данных в памяти. Чего мне не хватает?
Я получаю сообщение об ошибке
Microsoft.EntityFrameworkCore.DbUpdateException : An error occurred while updating the entries. See the inner exception for details.
---- Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'no such table: User'.
Как заставить таблицы создаваться?
Я даже пытался использовать
RelationalDatabaseCreator databaseCreator =
(RelationalDatabaseCreator) ctx.Database.GetService<IDatabaseCreator>();
var s = databaseCreator.GenerateCreateScript();
ctx.Database.ExecuteSqlRaw(s);
но я не понимаю. Скрипт sql даже не запускается?