2011-12-16 36 views
0

我正在使用代碼優先方法來顯示使用SQL Server的多個表中的數據。對於我的C#學期項目,我正在建立一個社交網站。在我的索引視圖中,我想顯示來自兩個表格的數據,即來自帖子和評論。如何使用代碼優先方法顯示多個表中的數據

我嘗試了很多,但是下面沒有任何內容是在我的索引操作中。

首先,我使用這個,但後來我認爲它只執行表間的簡單連接。

public ActionResult Index() 
{ 
    var myobj = DB.Comments.Include("Post").ToList(); 
    return View(myobj); 
} 

如果我使用下面,而不是我上面的索引操作裏面的SQL查詢,並將其傳遞給視圖,它會產生一個例外。我如何避免這種情況?

public ActionResult Index() 
{ 
    var myobj = from u in DB.Posts 
        join b in DB.Comments 
        on u.UserID equals b.UserID 
        into obj 
        from ua in obj.DefaultIfEmpty() 
        select new { userComments = (ua == null) ? "" : ua.UserComments, UserPosts = u.UserPosts }; 

    return View(myobj); 
} 

其中內Index.cshtml我使用的是強類型查看:

@model IEnumerable<myApp.Models.DB.Comment> 

,然後用foreach循環顯示所有信息和評論。

但它只顯示那些postID存在於註釋表中的帖子(來自帖子的外鍵在註釋表中)。

我將如何顯示所有帖子及其評論(如果有)?


我使用.edmx文件作爲後端,用於從數據庫中檢索/添加數據我使用的是代碼優先的方法。

下面是一個代碼示例:

private SocialNetworkingEntities net = new SocialNetworkingEntities(); 

    public void Add(RegisterView user) 
    { 
     DB.UserInfo User = new DB.UserInfo(); 
     User.Name = user.UserName; 
     User.Password = user.UserPassword; 
     User.Email = user.UserEmail; 
     User.Birthday = user.UserDOB; 
     User.Sex = user.UserSex; 
     net.UserInfoes.Add(User); 
     net.SaveChanges(); 
    } 

回答

0

與你的第二個方法的問題是,你的看法是預計類型註釋的視圖模型。但是,如果您查看查詢,則會返回匿名類型而不是註釋。

在您的第一個查詢中,您從評論開始並加載評論的所有帖子。這樣你就不會得到沒有任何評論的帖子。

我認爲最簡單的方法是定義從帖子的關聯評論和改變你的查詢:

var myobj = DB.Posts.Include("Comments").ToList(); 

如果然後修改視圖接受型Post一切都應該工作的模型。

1

如果要顯示帶有可選註釋的帖子,則Post而不是Comment是您的主要模型類型。此外,您不必像第二種方法那樣手動連接表格 - 這是由EF自動完成的。

因此,首先使用您的第一個批准模式,並將其更改爲返回帖子。該評論是由你的導航屬性(帖子)訪問:

public ActionResult Index() 
{ 
    var allPosts = DB.Posts.Include("Comments").ToList(); 
    return View(allPosts); 
} 

其次,在你看來改變modeltype到Post

@model IEnumerable<myApp.Models.DB.Post> 

現在你應該可以枚舉所有帖子和可選的評論:

@foreach (Post post in Model) { 
    // display post 
    foreach (Comment comment in post.Comments) { 
     // display comment 
    } 
} 
+0

但問題是,在我的評語表foriegn關鍵是從後表即當前帖子ID我已經使用這個(VAR allPosts = DB.Posts.Include(「意見」)ToList();。) 但它會生成異常becoz張貼表與我的索引視圖中的評論表沒有關聯如果我使用(@model IEnumerable )比我無法訪問評論簡單我想顯示數據就像在Facebook序列中] – 2011-12-16 09:01:31

相關問題