2016-09-18 43 views
1

在我IdentityModels類我有一個屬性叫做報告像下面連接兩個表並返回DbSet對象

public DbSet<Report> Reports { get; set; } 

我的數據庫中有與此屬性從拉數據的相同名稱的表。

我也有一個叫做報告模型(除了一些其他屬性),具有這些

public class Report 
{ 
    //... 
    [Required] 
    public string State { get; set; } 

    [Column("reporter_id")] 
    public string ReporterId { get; set; } 

    [Required] 
    [Column("report_text")] 
    public string ReportText { get; set; } 
    //... 
} 

我也有一種觀點認爲是報告一個強烈的意見作爲其模型。

當我遇到了一個問題是,我的模型有reporterId這是一個外鍵不同的表叫AspNetUsers有用戶的詳細信息。

我想不會顯示用戶名ID和因爲報告表不僅具有用戶id有沒有辦法對我來說,顯示用戶名。

AspNetUsers表中的user_name字段作爲我的模型的一部分的什麼方法?顯然必須在reports表和aspNetUsers表之間存在join聲明,但我不確定如何最好地執行此操作。

+0

你可以把一個'AspNetUsers'模式也? – Sampath

+0

你沒有把'userId'放在'Report'模型上? – Sampath

+0

我在我的'Report'模型用戶ID(屬性稱爲'ReporterId'),但我需要使用「用戶名」,從「AspNetUsers」表,因爲我想要的用戶名不是用戶ID –

回答

1

我的答案可能不是對你有幫助,但我仍然會發布它,視圖模型是專門用於這種情況下,你需要在視圖中顯示兩個或更多表格數據。

首先,你需要創建一個視圖模型可以稱之爲UserReportViewModel。在此視圖模型中,您將包含一個附加屬性UserName,它將根據ReporterId提取用戶名。

public class UserReportViewModel 
{ 
    [Required] 
    public string State { get; set; } 

    [Column("reporter_id")] 
    public string ReporterId { get; set; } 

    [Required] 
    [Column("report_text")] 
    public string ReportText { get; set; } 

    public string UserName{ get; set; } 
} 

然後,假設你使用LINQ檢索報告:

Dim ReportList As List(Of UserReportViewModel) = New List(Of UserReportViewModel) 
ReportList = dbContext.Reports.Select(Function(x) New UserReportViewModel With { 
                 .State = x.State, _ 
                 .ReporterId= x.ReporterId, _ 
                 .UserName= dbContext.Users.Find(x.ReporterId).UserName, _ 
                 .ReportText = x.ReportText, _ 
                }).ToList() 
1

您必須更改模型,如下所示。

public class Report 
    { 
     [Required] 
     public string State { get; set; } 

     [ForeignKey("UserId")] 
     public virtual AspNetUser { get; set; } 
     public int UserId { get; set; } 

     [Required] 
     [Column("report_text")] 
     public string ReportText { get; set; } 

    } 

    public class AspNetUser 
    { 
     public int Id { get; set; } 

     public string Name { get; set; } 

     public virtual ICollection<Report> Reports { get; set;} 
    } 

您的查詢應該是這樣的:

var query = 
(from u in db.AspNetUsers 
from r in u.Reports 
select new { UserName = u.Name, ReportText = r.ReportText }).ToList(); 
+0

對不起,我在哪裏使用LINQ查詢? –

+0

我沒有得到你?你是否如上所示改變你的模型? – Sampath