リンクされたオブジェクトは他のクラスで参照される必要があるため、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を参照するクラスの1つは、次のようになります。
public class UserRoleEntity : Entity
{
public UserRole UserRole { get; set; }
public Guid EntityId { get; set; }
public EntityType EntityType { get; set; }
}
UserオブジェクトとRoleオブジェクトをこのクラスに個別に格納したくないのは、それらが緊密に結合されておらず、データが孤立している可能性があるためです。