我有以下模型
旅行模型//想到Grails域类
public long FerryId { set;get; }
public long FromLocationId { set;get; }
public long ToLocationId { set;get; }
public Ferry Ferry { set;get; }
public Location FromLocation { set;get; }
public Location ToLocation { set;get; }
然后我将一个列表返回到视图并循环浏览:
@foreach (var item in Model) {
@item.FerryId //displays fine
@item.Ferry.FerryName //displays fine
@item.FromLocationId //displays fine
@item.FromLocation.LocationName //doesn't work
@item.ToLocationId //displays fine
@item.ToLocation.LocationName //doesn't work
}
问题是尝试获取“item.ToLocation.LocationName”和“item.FromLocation.LocationName”相同
我很担心为什么Ferry.FerryName会返回而不是其他人。
我对C#/ MVC3 / Razor来说是全新的,但是在grails / groovy中这不会有任何问题, 有什么想法吗?和额外的一般建议? 非常感谢。
答案 0 :(得分:1)
你的意思是“不起作用”?我们可以诊断出错误消息吗?
没有它,我可以做出有根据的猜测...我猜你正在使用Entity Framework从数据库中检索这些模型对象,而FromLocation和ToLocation是对另一个实体的引用。如果这是正确的,您需要明确告诉EF在将模型传递给视图之前从数据库加载这些属性。这很简单......只需在您的LINQ查询中添加.Include("FromLocation").Include("ToLocation")
即可从EF上下文中检索内容
有关此“热切加载”技术的更多信息以及加载相关实体的其他选项,请参阅http://msdn.microsoft.com/en-us/library/bb896272.aspx。
答案 1 :(得分:0)
我认为是对的,这让我想问一下,FromLocation / ToLocation.LocationName的访问者是什么?是公开的吗?
对不起,如果这是一个愚蠢的问题,但有时候那些东西会让我感到...
HTH,
\ ^ /我l
答案 2 :(得分:0)
我查看了文档,查询不是问题:
var trips = DB.Trips.Include("FromLocation").Include("ToLocation").ToList();
但是我必须手动添加locaiton对象以保存:
[HttpPost]
public ActionResult Create(Trip trip)
{
var fromLocation = DB.Locations.Find(trip.FromLocationId);
var toLocation = DB.Locations.Find(trip.ToLocationId);
trip.FromLocation = fromLocation;
trip.ToLocation = toLocation;
if (ModelState.IsValid)
{
DB.Trips.Add(trip);
DB.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(trip);
}
}
现在我可以加载嵌套对象:
@item.ToLocation.LocationName
@item.FromLocation.LocationName
让我感到困惑的是Ferry对象的情况我没有手动添加它!