如何使用POCO类在Entity Framework中触发更改检测/验证

时间:2012-09-17 17:36:29

标签: entity-framework ef-code-first poco

我们正在将实体框架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。

我们缺少什么?

0 个答案:

没有答案