2017-12-28 73 views
0

以下の図に添付されたエンティティを設計しました。私は同じことが私のコアアプリケーションに達成されるにはプロパティはエンティティタイプのナビゲーションプロパティではありません

select * from users u, roles r, userroles ur, roleappactivities raa, applications ap, activities ac 
where u.Id = ur.UserId 
and ur.RoleId = r.Id 
and r.Id = raa.RoleId 
and raa.ApplicationId = ap.Id 
and raa.ActivityId = ac.Id 
and u.id = 1 

次のようにしてこのユーザーのすべての役割、活動、アプリケーションを取得するには、SQLで次のクエリを書いているだろう、このスキーマのために enter image description here

、私は失敗している次のコードを書いた。私は次のコードを使って上記のクエリをどのように達成するかというアイディアを使い果たしました。どんな助けでも大歓迎です。

_context.Users 
       .Include("Roles") 
       .Include("RoleAppActivities") 
       .Include("Applications") 
       .Include("Activities") 
       .Where(x => x.Id == id) 
       .Select(x => new User 
       { 
        Id = x.Id, 
        TId = x.TId, 
        Roles = x.Roles 

       }) 

は編集:ここでは

が私のエンティティ

public class User 
    { 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     [Key] 
     public int Id { get; set; } 
     public string Name { get; set; }   
     public ICollection<UserRole> Roles { get; set; } 
    } 

パブリッククラスでのUserRole は{

public int UserId { get; set; } 
    public User User{ get; set; } 

    public int RoleId { get; set; } 
    public Role Role{get; set;} 
} 
public class Role 
    { 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     [Key] 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public ICollection<UserRole> Users { get; set; } 
     public ICollection<RoleApplicationActivity> RoleApplicationActivity { get; set; } 
    } 

public class RoleApplicationActivity 
    { 

     public int Id { get; set; } 
     public int RoleId { get; set; } 
     public int ApplicationId { get; set; } 
     public int ActivityId { get; set; } 

     public Activity Activity { get; set; } 
     public Application Application { get; set; } 
     public Role Role { get; set; } 
    } 

public class Activity 
    { 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     [Key] 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public ICollection<RoleApplicationActivity> RoleApplicationActivity { get; set; } 
    } 


public class Application 
    { 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     [Key] 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public ICollection<RoleApplicationActivity> RoleApplicationActivity { get; set; } 

    } 
+0

ユーザーエンティティのナビゲーションプロパティを構成していないようです。あなたはエンティティを共有しますか? – lucky

+0

これを行う方法はよくわかっています。https://docs.microsoft.com/en-us/ef/core/querying/related-data –

答えて

0

...それがより強く型付けされた.INCLUDE(「文字列)」を使用するよりもだと思います問題を解決するために以下を実行します。

from u in _context.Users 
        from r in _context.Roles 
        from app in _context.Applications 
        from ac in _context.Activities 
        where u.Id == 1 
        select u 
0

私はあなたのエンティティのユーザーが他のコレクション(役割を持つべきだと思います、 RoleAppActivities ..) )。だから、あなたが直接(ユーザー=> user.Collection).INCLUDEを使用してそれらをロードすることができ、私は私が私のクエリを変更しました

関連する問題