我正在进行MVC 3 Web应用程序并遇到了奇怪的问题。这里是一些代码:
模型声明:
控制器:
根据给定的答案,另一个尝试:
我有一个外键。我添加了LazyLoadingEnabled。有一个project.ToList(),但它不起作用。
根据第二个答案,我做了这样的事情:
我已经添加了 comments.ToList(),它可以工作。但我不确定这是否是正确的解决方案。可能比我的解决方法(步骤3)更好。有什么建议吗?
谢谢
模型声明:
public class Project
{
public int ID { get; set; }
[Required(ErrorMessage = "Write a title.")]
public string Title { get; set; }
public DateTime TimeAdded { get; set; }
[Required(ErrorMessage = "Write some description.")]
[MaxLength(int.MaxValue)]
public string Content { get; set; }
public ICollection<Comment> Comments { get; set; }
}
public class Comment
{
public int ID { get; set; }
[Required()]
public int ProjectID { get; set; }
public DateTime TimeAdded { get; set; }
[Required()]
public string Text { get; set; }
public Project project { get; set; }
}
控制器:
public class HomeController : Controller
{
dataDBContext db = new dataDBContext();
//
// GET: /Home
public ActionResult Index()
{
var comments = from c in db.Comments
select c;
var projects = from p in db.Projects
orderby p.TimeAdded descending
select p;
return View(projects.ToList());
}
- When I run project Comments are not visible on my view.
- I'm setting a breakpoint just after both linq queries, debugging and checking "project" variable fields Comments, they are not populated. Then I'm checking "comments" variable, it has some data. Again checking "project" variable and SOMEHOW fields Comments are populated and finally Comments appears on website. If I won't set breakpoint and check if variable "comments" is populated they won't appear on website. (I hope this is understandable)
I found simple workaround:
public ActionResult Index() { var projects = from p in db.Projects orderby p.TimeAdded descending select p; foreach (var p in projects) { var comments = from c in db.Comments where c.ProjectID == p.ID select c; p.Comments = comments.ToList(); } return View(projects.ToList()); }
but it looks (according to point 2) that this can be automatically populated SOMEHOW :)
根据给定的答案,另一个尝试:
public class HomeController : Controller
{
dataDBContext db;
public HomeController()
{
db = new dataDBContext();
db.Configuration.LazyLoadingEnabled = false;
}
//
// GET: /Home
public ActionResult Index()
{
var projects = from p in db.Projects
orderby p.TimeAdded descending
select p;
return View(projects.ToList());
}
我有一个外键。我添加了LazyLoadingEnabled。有一个project.ToList(),但它不起作用。
根据第二个答案,我做了这样的事情:
public class HomeController : Controller
{
dataDBContext db;
public HomeController()
{
db = new dataDBContext();
}
//
// GET: /Home
public ActionResult Index()
{
var projects = from p in db.Projects
orderby p.TimeAdded descending
select p;
var comments = from c in db.Comments
select c;
List<Comment> l = comments.ToList();
return View(projects.ToList());
}
我已经添加了 comments.ToList(),它可以工作。但我不确定这是否是正确的解决方案。可能比我的解决方法(步骤3)更好。有什么建议吗?
谢谢