私は既存のプログラムをMVC5に変換しています。データベースから複数のテーブルを結合する必要があります。ダミーのプロジェクトプロジェクトを試してみました。私は回復できないほどダメージを与えません。データベースの個々のテーブルをすべて引き出して表示することができました。しかし、私はそれらを結合しようとすると、私は "オブジェクトのインスタンスに設定されていないオブジェクト参照"を取得します。テーブルを結合する、オブジェクト参照を取得しない
注:製品とタスクは既存のモデルとDBのテーブルです。すでに展開されており、変更することはできません。
関連するコントローラコード:
public ActionResult Index()
{
_db.Configuration.ProxyCreationEnabled = false;
var JoinTest = (
from a in _db.Task.AsEnumerable()
join b in _db.Product on a.ProductId equals b.ProductId
select new
{
TaskId = a.TaskId,
TaskDesc = a.TaskDescription,
ProdDesc = b.ProductDescription
});
ViewData["CompositeData"] = JoinTest;
ViewData["ProductData"] = _db.Product.ToList();
}
ビューコード:
@foreach (var item in ViewData["CompositeData"] as List<TomFoolery.Models.ViewModel>)
{
//Printing relevant items from DB
}
そして、徹底すること、ビューモデルの定義:だから
namespace TomFoolery.Models
{
public class ViewModel
{
public Product Product { get; set;}
public Task Task { get; set; }
}
}
は、私が間違っているつもりです? に設定した項目が匿名タイプのリストであるため、
JoinTest変数(IQueryble <>)がビューに渡されることも問題ではありません。ビューのレンダリング中にその変数にtoList()が呼び出されても、コントローラが配置されているため_dbが配置されている可能性があります。ちょうど、その問題に関連している可能性があることに気づきたい。検証にライフサイクルの掘り下げが必要です。 – x82