我使用实体框架并拥有一组用户:
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,但为时已晚,我需要将内存中的内容与 DB 内容结合起来进行验证。有没有办法做到这一点?
解决方案
使用 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"));
}
}