代码之家  ›  专栏  ›  技术社区  ›  Craig W.

设置ExcludingNestedObjects时导致ObjectDisposedException的FluentAssertions

  •  2
  • Craig W.  · 技术社区  · 7 年前

    我的EF模型定义如下:

    public class ProgramManagerRolePermission
    {
        [Key, Column(Order = 1)]
        public Guid ShardKey { get; set; }
    
        [Key, Column(Order = 2)]
        public Guid RoleId { get; set; }
    
        [Key, Column(Order = 3)]
        public Guid PermissionId { get; set; }
    
        [ForeignKey(nameof(RoleId))]
        public virtual ProgramManagerRole Role { get; set; }
    
        [ForeignKey(nameof(PermissionId))]
        public virtual ProgramManagerPermission Permission { get; set; }
    }
    

    using (var repo = IdentityProgramRepositoryFactory.Get())
    {
        var role = repo.ProgramManagerRoles
            .Include(r => r.Permissions)
            .SingleOrDefault(r => r.Id == roleId);
        role.Permissions.Should().BeEquivalentTo(new[] {
            new Repo.ProgramManagerRolePermission
            {
                PermissionId = ProgramManagerPermissions.GrantOrRevokeRoles.Id,
                RoleId = roleId,
                ShardKey = identityProgramId
            },
            new Repo.ProgramManagerRolePermission
            {
                PermissionId = ProgramManagerPermissions.ManageNode.Id,
                RoleId = roleId,
                ShardKey = identityProgramId
            }
        }, options => options.ExcludingNestedObjects());
    }
    

    当我运行它时,测试失败,因为 ObjectDisposedException 与消息一起抛出:

    如果我把最后一行改为:

    }, options => options.Excluding(p => p.Role).Excluding(p => p.Permission));
    

    然后测试成功运行。

    Role Permission . 当我显式地排除它们时,测试工作正常,当我告诉它排除所有嵌套对象时,它似乎仍在尝试在它们之间导航。

    以前有人碰到过这个吗?为什么我认为应该发生的事情没有得到任何解释?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Dennis Doomen    7 年前

    你用的是 ExcludingNestedObjects ,这意味着它不会对 Role Permission 物体。这些是根对象的属性。但它仍将尝试进行简单的相等性检查。