我试图将 EF 代码首先在多对多关系中自动创建的链接类公开为单独的对象,因为该链接对象需要在其他类中引用,但是我似乎在获取存在于数据库。
我有以下 3 个对象:
public class Role : Entity
{
public virtual ICollection<User> Users { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<Permission> Permissions { get; set; }
}
public class User: Entity
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
public class UserRole : Entity
{
public User User { get; set; }
public Role Role { get; set; }
}
这将创建以下表格:
现在我可以看到问题在于它正在创建一个RoleUsers
表,而它不应该并且应该只使用我的UserRoles
表。如何强制链接表,UserRoles
以便我可以在 EF 中公开该链接对象,以便我可以在其他对象中使用它?
另外,在编写查询时我将如何遍历对象?我仍然可以使用 User.Roles.Any(y => y.Name == "blah"),还是现在必须通过 User.UserRoles.Any(y => y.Role.Name = 进行查询=“废话”)?我想在暴露链接对象的同时保持透明链接是不可能的?
编辑:引用 UserRole 作为导航属性的类之一如下所示:
public class UserRoleEntity : Entity
{
public UserRole UserRole { get; set; }
public Guid EntityId { get; set; }
public EntityType EntityType { get; set; }
}
我不想将 User 和 Role 对象单独存储在此类中,因为这样它们就不是紧密耦合的,并且数据可能是孤立的。