У меня есть класс модели:
public class Work
{
public long Id { get; set; }
[Required]
public string Name { get; set; }
}
Я хочу, чтобы Work.Name
было уникальным, поэтому я определяю DbContext
:
public class MyDbContext : DbContext
{
public MyDbContext () : base() { }
public MyDbContext (DbContextOptions<MyDbContext > options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Work>(entity =>
entity.HasIndex(e => e.Name).IsUnique()
);
}
public DbSet<Work> Works { get; set; }
}
И я хочу проверитьэто, так что у меня есть такой тест:
[Fact]
public void Post_InsertDuplicateWork_ShouldThrowException()
{
var work = new Work
{
Name = "Test Work"
};
using (var context = new MyDbContext (options))
{
context.Works.Add(work);
context.SaveChanges();
}
using (var context = new MyDbContext (options))
{
context.Works.Add(work);
context.SaveChanges();
}
using (var context = new MyDbContext (options))
{
Assert.Equal(1, context.Works.Count());
}
}
(объект option
содержит настройки для InMemoryDatabase
)
Я не знаю, что проверить, нотест не пройден в Assert
, а не во втором SaveChanges()
.База данных (context
) содержит два объекта с одинаковым Name
.
Я просмотрел все соответствующие вопросы, но не увидел, чтобы кто-нибудь отвечал на мои вопросы.