2009-09-25 60 views
1

我只是直接跳到它。我有一個叫做「請求」的模型,我使用LINQ to SQL創建。我有另一個模型叫「評論」。 「請求」可以有許多「評論」。嘗試在ASP.NET MVC中的EntityCollection中循環實體時出現無效投射

在我的控制器我有這樣的代碼:

public ViewResult Details(int? id) 
    { 
     return View(requestService.GetRequest(id)); 
    } 

在我看來,我有這個標記(編輯爲簡潔起見)

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Models.Request>" %> 
<p> 
     CustomerNumber: 
     <%= Html.Encode(Model.CustomerNumber) %> 
    </p> 
    <p> 
     CustomerName: 
     <%= Html.Encode(Model.CustomerName) %> 
    </p> 

    ... etc ... 


    <table id="comments"> 
    <thead> 
     <tr> 
      <th>Date</th> 
      <th>User Name</th> 
      <th>User IP</th> 
      <th>Comment</th> 
     </tr> 
    </thead> 
    <tbody> 
    <% foreach (var comment in Model.Comments) { %> 
     <tr> 
      <td><%= Html.Encode(comment.CommentDate) %></td> 
      <td><%= Html.Encode(comment.CommentUserName) %></td> 
      <td><%= Html.Encode(comment.CommentIP) %></td> 
      <td><%= Html.Encode(comment.Comment1) %></td> 
     </tr> 
    <% } %> 
    </tbody> 
</table> 

好吧,這裏發生了什麼。當我調用Details方法/動作時,它會使用我的服務層去獲取用戶希望看到的請求。但是,當它遍歷與請求相關的註釋時,它會拋出一個「無效的拋出異常」並死亡。這段代碼兩天前工作正確,沒有對這部分項目(其他文件,但不是這個東西)進行修改。

我試圖找到鑄造問題,我很茫然。請幫助我,因爲我認爲這是我的項目真正起飛之前克服的最後障礙。如果您需要更多信息,請告訴我。

+1

什麼是異常的完整堆棧和完整錯誤消息? – 2009-09-25 17:27:38

+0

這是最後幾行......不能發佈完整的堆棧跟蹤。 在System.Data.SqlClient.SqlBuffer.get_Int32() 在System.Data.SqlClient.SqlDataReader.GetInt32(的Int32ⅰ) 在Read_Comment(ObjectMaterializer'1) 在System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader '2.MoveNext() at System.Data.Linq.EntitySet'1.Load() at System.Data.Linq.EntitySet'1.GetEnumerator() at ASP.views_home_details_aspx .__ RenderContent1(HtmlTextWriter __w,Control parameterContainer)在c:\ Code \ Prototypes \ PremiumFreightMVC \ Views \ Home \ Details中。aspx:第139行 – 2009-10-06 18:18:18

回答

0

那麼,在從事這個項目一段時間後,我用新鮮的眼睛檢查了一下,發現了問題。

我根據「生產」數據庫及其所有數據關係生成了我的模型。當我到達開始實際將數據寫入數據庫的項目部分時,我切換到測試數據庫來完成所有工作。我沒有意識到,生產「評論」表上的主鍵的數據類型與測試「評論」表不同(爲什麼?我不知道....)他們都是整數,但是prod版本是「bigint」,開發版本是「int」,所以很難發現。

因此,由於可能發生截斷,所以它嚇壞了,並拋出了一個InvalidCastException(這在這種情況下完全合乎邏輯)。我想這只是爲了告訴你,除了項目之外花費一點時間可以爲你帶來一些好處。無論如何,希望我的不幸可以幫助別人避免他們。

0

你有爲GetRequest編寫的單元測試嗎?如果沒有,我建議你寫一個來看看在調用該方法時會發生什麼。

至少要設置一個斷點並設置到該方法中,以確保設置了評論集合。

Is CommentDate a DateTime?你可能想對它做一個.ToString()。評論的任何成員是否返回null?很多東西要檢查。這裏有很多自動化單元測試的好機會。 :)

祝你好運!

相關問題