FluentAssertions 在设置 ExcludingNestedObjects 时导致 ObjectDisposedException
FluentAssertions causing ObjectDisposedException when ExcludingNestedObjects is set
我有一个定义如下的 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
消息:
Safe handle has been closed
如果我将最后一行更改为:
}, options => options.Excluding(p => p.Role).Excluding(p => p.Permission));
然后测试运行成功。
仅有的两个嵌套对象是 Role
和 Permission
。当我明确排除它们时,测试有效,当我告诉它排除所有嵌套对象时,它似乎仍在尝试浏览它们。
有人 运行 以前参与过这个吗?关于为什么我认为应该发生的事情没有任何解释?
您正在使用 ExcludingNestedObjects
,这意味着它不会对 Role
和 Permission
对象公开的对象进行结构比较。这些是您的根对象的属性。但它仍会尝试进行简单的相等性检查。
我有一个定义如下的 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
消息:
Safe handle has been closed
如果我将最后一行更改为:
}, options => options.Excluding(p => p.Role).Excluding(p => p.Permission));
然后测试运行成功。
仅有的两个嵌套对象是 Role
和 Permission
。当我明确排除它们时,测试有效,当我告诉它排除所有嵌套对象时,它似乎仍在尝试浏览它们。
有人 运行 以前参与过这个吗?关于为什么我认为应该发生的事情没有任何解释?
您正在使用 ExcludingNestedObjects
,这意味着它不会对 Role
和 Permission
对象公开的对象进行结构比较。这些是您的根对象的属性。但它仍会尝试进行简单的相等性检查。