use*_*479 1 c# asp.net-mvc controller view viewmodel
我有 3 个主菜单实体。和子菜单。我创建了菜单视图模型。
我的实体:
主菜单.cs:
public UstMenuler()
{
AltMenuler = new HashSet<AltMenuler>();
}
public int ID { get; set; }
public string Name { get; set; }
public bool AktifMi { get; set; }
public int YetkiID { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }
public virtual Yetkilendirme Yetkilendirme { get; set; }
public virtual ICollection<AltMenuler> AltMenuler { get; set; }
Run Code Online (Sandbox Code Playgroud)
子菜单.cs:
public partial class AltMenuler
{
public AltMenuler()
{
UstMenuler = new HashSet<UstMenuler>();
}
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }
public int? YetkiID { get; set; }
public string Name { get; set; }
public string ActionName { get; set; }
public string ControllerName { get; set; }
public virtual Yetkilendirme Yetkilendirme { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的视图模型:
public class MenuViewModel
{
public UstMenuler UstMenuler { get; set; }
public AltMenuler AltMenuler { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
dbContext = new MarkettingDbContext();
int sessionYetkiID = (int)Session["yetkiID"];
MenuViewModel menuler = new MenuViewModel();
var query = (from menu in dbContext.UstMenuler
where (menu.YetkiID == sessionYetkiID)
select new MenuViewModel
{
menuler.UstMenuler.ID = menu.ID,
menuler.UstMenuler.Name = menu.Name,
menuler.UstMenuler.YetkiID = menu.YetkiID,
menuler.UstMenuler.ControllerName = menu.ControllerName,
menuler.UstMenuler.ActionName = menu.ActionName
}).ToList();
Run Code Online (Sandbox Code Playgroud)
执行查询时出现错误。例如我的 sessionID 是 1,我想拿我的主菜单和子菜单。
问题是您的对象初始值设定项:
select new MenuViewModel
{
menuler.UstMenuler.ID = menu.ID,
menuler.UstMenuler.Name = menu.Name,
menuler.UstMenuler.YetkiID = menu.YetkiID,
menuler.UstMenuler.ControllerName = menu.ControllerName,
menuler.UstMenuler.ActionName = menu.ActionName
}
Run Code Online (Sandbox Code Playgroud)
首先,您menuler在对象初始值设定项中使用,我不知道为什么。接下来,您尝试分配给子属性,即使它确实编译了,也会导致NullReferenceException. 总的来说,这基本上不是你想做的:)
相反,我会使用以下两个选项之一。
如果您很乐意UstMenuler将menu参数中的引用复制到新的视图模型实例中,那么您可以非常轻松地做到这一点:
select new MenuViewModel { UseMenuler = menu }
Run Code Online (Sandbox Code Playgroud)
或者,如果您想创建一个新的UstMenuler并从menu以下位置复制属性:
select new MenuViewModel
{
UstMenuler = new UstMenuler
{
ID = menu.ID,
Name = menu.Name,
YetkiID = menu.YetkiID,
ControllerName = menu.ControllerName,
ActionName = menu.ActionName
}
}
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,您都不需要您menuler似乎没有在其他任何地方使用的变量。
听起来您正在使用 LINQ to Entities,听起来您可能希望将数据库查询部分与投影部分分开。在您的情况下,最简单的方法是避免使用查询表达式语法,以便您可以AsEnumerable轻松调用。例如:
var query = dbContext.UstMenuler
.Where(menu => menu.YetkiID == sessionYetkiID)
.AsEnumerable() // Do the projection in-process
.Select(menu => new MenuViewModel
{
UstMenuler = new UstMenuler
{
ID = menu.ID,
Name = menu.Name,
YetkiID = menu.YetkiID,
ControllerName = menu.ControllerName,
ActionName = menu.ActionName
}
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5457 次 |
| 最近记录: |