1

我们正在使用带有 POCO 类(无代理)的 Entity Framework 4.3.1。我们的 User 类存储了一个不应被任何其他用户使用的电子邮件地址。以下测试用于检查此验证:

  [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 的电子邮件地址。

我们缺少什么?

4

0 回答 0