モバイル アプリケーションからログを追跡するための単純なポータルを作成しようとしています。そのため、これを支援するためにエンティティ フレームワークと MVC3 を使用しました。ただし、最近、データベースからエンティティを取得しようとすると行き詰まりました。
Run クラスは次のとおりです。
namespace LifestyleGuide.Models
{
[DataContract(IsReference = true)]
[KnownType(typeof(User))]
public partial class Run
{
[DataMember]
public string User_ID { get; set; }
[DataMember]
public System.DateTime Date { get; set; }
[DataMember]
public Nullable<int> Distance { get; set; }
[DataMember]
public Nullable<int> Duration { get; set; }
[DataMember]
public Nullable<int> Calories { get; set; }
[DataMember]
public virtual User User { get; set; }
}
}
User_ID と日付は、User_ID が User テーブルからの外部キーである複合キーを形成します。
以下は、コントローラーからの「詳細」メソッドです。
public ActionResult Details(String id, DateTime date)
{
using (var db = new inspireEntities())
{
Run run = db.Runs.Find(id, date);
return View(run);
}
}
ただし、実行しようとすると、実行オブジェクトは常にnullとして表示されます。
どんな提案でも大歓迎です!
編集: これがホームページのビューです。
@model IEnumerable<LifestyleGuide.Models.Run>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
<center>User ID</center>
</th>
<th>
<center>Date</center>
</th>
<th>
<center>Distance</center>
</th>
<th>
<center>Duration</center>
</th>
<th>
<center>Calories</center>
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.User_ID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Date)
</td>
<td>
@Html.DisplayFor(modelItem => item.Distance)
</td>
<td>
@Html.DisplayFor(modelItem => item.Duration)
</td>
<td>
@Html.DisplayFor(modelItem => item.Calories)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.User_ID, date = item.Date }) |
@Html.ActionLink("Details", "Details", new { id = item.User_ID, date = item.Date }) |
@Html.ActionLink("Delete", "Delete", new { id = item.User_ID, date = item.Date })
</td>
</tr>
}
</table>
テーブル内のフィールドはデータベースから直接入力されるため、既に存在している必要があります。
注: ビューを使用して実行オブジェクトを作成してアクセスすることに問題はありません。null実行オブジェクトは、データベースに挿入ステートメントを直接実行し、後で上記のように .find メソッドを使用して取得しようとしたときにのみ発生します。