什么时候实体出现在模型的集合中

时间:2012-10-29 19:52:59

标签: entity-framework

我使用实体框架并拥有一组用户:

 public class DbModel : DbContext
 {
     public DbSet<User> Users { get; set; }

我像这样添加一个用户:

  User UserOne = new User();
  model.Users.Add( UserOne );

我请求用户数:       int userCount = model.Users.Count();

userCount为“0”我希望“1”。添加DetectChanges无济于事。 在“model.SaveChanges()”之后,Count = 1,但那是为了迟到我需要将内存中的内容与数据库内容结合起来进行验证。有没有办法做到这一点?

使用Erik Philips的答案我为DbSet写了以下扩展方法

public static class DBSetExtentions
{
     public static IEnumerable<T> AllMembers<T>(
         this DbSet<T> target, 
         Func<T, bool> selection
         )  where T : class
    {
        return target.Local.Where(selection).Union(target.Where(selection));
    }
 }

它允许我选择所有实体的验证,例如:

    private void ValidateEmail(ValidationDto validationDto)
    {

        int usersWithSameEmail =
            validationDto.Model.Users.AllMembers(
                x => x.EmailAddress.Equals( EmailAddress ) ).Count();

        if (usersWithSameEmail > 1)
        {
            validationDto.Result.Add(new ValidationResult("Email address is in use"));
        }
    }

1 个答案:

答案 0 :(得分:3)

您可以使用Local向客户端查询项目(已提交和未提交)到您的数据存储。

var count = model.Users.Local.Count();

有一点需要注意,这只是用户的本地表示。这意味着它可能包含数据库中的部分用户数(已更改和/或未更改),以及您已创建但未保存的新用户。

Interesting Article - Using DbContext in EF 4.1 Part 7: Local Data