在这种情况下,不支持在System.Reflection.MethodBase类型的调试对象中检查对象的状态

时间:2018-08-23 13:44:47

标签: c# asp.net entity-framework asp.net-core visual-studio-mac

我不知道此错误意味着什么。我正在使用Visual Studio for Mac 7.5.0社区版本。从我开始,我就在带有asp.net核心的实体框架中使用延迟加载。

public partial class AdminUser
{
    public AdminUser()
    {
        RoleAssign = new HashSet<RoleAssign>();
    }

    public Guid UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string UserName { get; set; }
    public byte[] Password { get; set; }
    public DateTime CreatedTimeStamp { get; set; }
    public DateTime? ModifiedTimeStamp { get; set; }
    public DateTime? LogDate { get; set; }
    public short? LogNumber { get; set; }
    public bool ReloadActiveFlag { get; set; }
    public bool IsActive { get; set; }
    public string ExtraText { get; set; }
    public string ResetPasswordToken { get; set; }
    public DateTime? ResetPasswordTokenCreatedTimeStamp { get; set; }

    public virtual ICollection<RoleAssign> RoleAssign { get; set; }
}

角色分配实体模型

public partial class RoleAssign
    {
        public Guid RoleAssignId { get; set; }
        public Guid RoleId { get; set; }
        public Guid UserId { get; set; }

        public virtual AdminRole Role { get; set; }
        public virtual AdminUser User { get; set; }
    }

这是实体构建器

 modelBuilder.Entity<RoleAssign>(entity =>
            {
                entity.Property(e => e.RoleAssignId).ValueGeneratedNever();

                entity.HasOne(d => d.Role)
                    .WithMany(p => p.RoleAssign)
                    .HasForeignKey(d => d.RoleId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK__RoleAssig__RoleI__160F4887");

                entity.HasOne(d => d.User)
                    .WithMany(p => p.RoleAssign)
                    .HasForeignKey(d => d.UserId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK__RoleAssig__UserI__17036CC0");
            });

这是用户表的实体构建器

modelBuilder.Entity<AdminUser>(entity =>
            {
                entity.HasKey(e => e.UserId);

                entity.Property(e => e.UserId).ValueGeneratedNever();

                entity.Property(e => e.CreatedTimeStamp)
                    .HasColumnType("datetime")
                    .HasDefaultValueSql("(getdate())");

                entity.Property(e => e.Email)
                    .IsRequired()
                    .IsUnicode(false);

                entity.Property(e => e.ExtraText).IsUnicode(false);

                entity.Property(e => e.FirstName)
                    .IsRequired()
                    .IsUnicode(false);

                entity.Property(e => e.IsActive)
                    .IsRequired()
                    .HasColumnName("isActive")
                    .HasDefaultValueSql("((1))");

                entity.Property(e => e.LastName)
                    .IsRequired()
                    .IsUnicode(false);

                entity.Property(e => e.LogDate).HasColumnType("datetime");

                entity.Property(e => e.ModifiedTimeStamp).HasColumnType("datetime");

                entity.Property(e => e.Password).IsRequired();

                entity.Property(e => e.ResetPasswordToken).IsUnicode(false);

                entity.Property(e => e.ResetPasswordTokenCreatedTimeStamp).HasColumnType("datetime");

                entity.Property(e => e.UserName)
                    .IsRequired()
                    .IsUnicode(false);
            });

UOW代码

public async Task<UserViewModel> AdminAuthentication(UserViewModel userView)
        {
            var user = await _adminGenericRepository.FindAsync(x => x.IsActive && x.UserName.Equals(userView.UserName) && (AesEncryptAndDecrypt.DecryptStringFromBytes(x.Password, crytograpyKey, crytograpyIV).Equals(userView.Password)));

            if (user != null)
            {
                return new UserViewModel
                {
                    UserId = user.UserId,
                    isActive = user.IsActive,
                    UserName = user.UserName,
                    LastName = user.LastName,
                    FirstName = user.FirstName,
                    SelectedRole = mapRoleDbDataToViewModel(user.RoleAssign != null ? user.RoleAssign.FirstOrDefault().Role : null)
                };
            }
            return null;

        }

映射器类

private RoleViewModel mapRoleDbDataToViewModel(AdminRole dbRole)
        {
            if (dbRole != null)
            {
                return new RoleViewModel
                {
                    RoleId = dbRole.RoleId,
                    RoleName = dbRole.RoleName,
                    RoleType = dbRole.RoleType,
                    SortOrder = dbRole.SortOrder,
                    TreeLevel = dbRole.TreeLevel,
                    Permissions = GetRuleByRoleId(dbRole.RoleId)
                };
            }
            return null;
        }

存储库文件

public virtual async Task<T> FindAsync(Expression<Func<T, bool>> predicate)
        {
            return await _entities.Set<T>().SingleOrDefaultAsync(predicate);
        }

public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
        {

            IQueryable<T> query = _entities.Set<T>().Where(predicate);
            return query;
        }

以下是错误的屏幕截图。

error image

不知道此错误的含义-在此上下文中不支持检查类型为System.Reflection.MethodBase的调试对象中的对象状态。

2 个答案:

答案 0 :(得分:1)

据我了解,调试是在哪里进行的,调试是从Visual Studio调试器的表达式升降器中产生的,因此这可能意味着调试器正在尝试从类型为System.Reflection.MethodBase的实例中获取数据,但此类对象无法使用,因此产生了该错误,

您可以尝试使用旧版调试引擎,可以对其进行修复 (工具->选项->调试->常规->“使用托管兼容模式”)

答案 1 :(得分:0)

不要依赖Find,因为它将在DB之前进入缓存,尤其是在您要检索相关实体的地方。另外,我相信您对密码的处理是反向的,由于具有解密功能,因此不会通过EF / SQL。因此,请对用户提供的密码进行加密/哈希处理,然后将其与数据库中已加密/哈希处理的数据进行比较。

const count=3;
const selectRow=row=>$('.parent .child').slice(row*count, row*count+count);
const row=Math.ceil($('.parent .child').length/count);


for(let i=0;i<row;i++) selectRow(i).html(i);

for(let i=0;i<row;i++) selectRow(i).each((i,v)=>{//i is the index for each div in the row })