我们正在将实体框架4.3.1与POCO类(无代理)一起使用。 我们的用户类存储了一个不应被任何其他用户使用的电子邮件地址。 以下测试用于检查此验证:
[TestMethod]
public void UserEmailNotUniqueTest()
{
// arrange
// - create user one and store in db
User userOne = TIF.GetUser(model, true);
// - create user two and store in db
User userTwo = TIF.GetUserTwo(model, true);
// act
// - change user one email to user two email
userOne.EmailAddress = userTwo.EmailAddress;
// - save
model.SaveChanges();
测试初始化创建一个空数据库并将其连接到“模型”DbContext后代。 TIF类创建用户的测试实例并将其存储在数据库中。这样做,两个用户都存在于数据库中。 此验证要求数据库的状态保持不变,因此我们有一个重写的SaveChanges方法,因此我们可以传入可序列化的事务:
public virtual int SaveChanges(bool commitWhenDone)
{
try
{
saving = true;
int result;
TransactionScope scope;
using (scope = new TransactionScope( modelTransaction.Get() ))
{
//… open connection etc.
ChangeTracker.DetectChanges();
IEnumerable<DbEntityValidationResult> validationResults =
GetValidationErrors();
//… handle the errors
result = base.SaveChanges();
测试失败,因为未检测到任何更改。没有执行验证代码。检查model.Entity(userOne).State返回“Unchanged”,但CurrentValues包含正确的值,即userOne的电子邮件地址为userTwo。
我们缺少什么?