我有一个模型类:
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
的对象。
我查看了所有相关的问题,但没有看到任何人回答我所问的问题。