2012-12-01 58 views
1

一個純粹的連接表我創建了一個純粹的連接表瞭如下因素兩個表:查詢實體框架代碼中創建首先

用戶:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int UserID { get; set; } 
public string UserName { get; set; } 
public String FirstName { get; set; } 
public String LastName { get; set; } 

public virtual ICollection<CrRole> Roles { get; set; } 

角色:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int RoleID { get; set; } 
public String RoleName { get; set; } 

public virtual ICollection<CrUser> Users { get; set; } 

Fluent API創建UserRole連接表:

modelBuilder.Entity<CrUser>() 
     .HasMany(c => c.Roles) 
     .WithMany(i => i.Users) 
     .Map(t => t.MapLeftKey("UserID") 
      .MapRightKey("RoleID") 
      .ToTable("CrUserRole")); 

這工作正常,並創建具有UserID和RoleID列的正確的CrUserRole表。

我在試圖找出如何對這個連接表進行簡單查詢時遇到了很大困難。在SQL命令是:

SELECT COUNT(*) 
FROM UserRole ur 
WHERE ur.RoleID = @RoleID 
AND ur.UserID = @UserID 

我試圖通過任何角色或用戶實體的導航鏈接去,但似乎總是與意大利麪條代碼的負載,其拒絕編譯:-(落得

如果有人能指出我的方向是正確的,我會非常感激的,即使是一些教程也會有所幫助,但我發現這些教程似乎只是創建連接表而不包括CRUD操作。

謝謝!

回答

1

謝謝Kaymar。

我最終使用的版本是:

String[] returnUsers = new String[1]; 

var role = context.Roles.First(r=>r.RoleName.Equals(roleName)); 

returnUsers = role.Users.Select(s => s.UserName).ToArray(); 

感謝讓我在正確的方向,並道歉需要數月更新這個!

+0

沒問題。感謝您的反饋 :) – Kamyar

1

注意到你的映射:

t.MapLeftKey("UserID") 
.MapRightKey("RoleID") 
.ToTable("CrUserRole")); 

這個映射顯示,查詢的結果將始終爲1或0 要做到這一點IMO是正確的方法如下: 您同時擁有用戶ID和角色ID吧?
先獲取用戶,然後查詢該特定用戶的角色。例如:

var user = ctx.Users.FirstOrDefault(u => u.UserID == myUserId); 
var role = user.Roles.FirstOrDefault(r => r.RoleId = myRoleId); 
+0

謝謝@Kamyar,至少編譯!一旦我爲它做了一些測試,就會嘗試一下。謝謝:-) –

+0

Np。祝你好運。 :) – Kamyar

相關問題