我试图找出如何组合我创建的ViewModels
中的两个(GameSectionVM和ReleaseInfoVM),然后用数据填充它(我想我知道该怎么做)。通常我只是将代码从一个复制到另一个但是让我挂起的是GameSectionVM只包含数据库查询的单行结果,而另一个VM(ReleaseInfoVM)包含0行或更多行的事实结果。我也不确定如何用所有数据填充VM,只需要确认我的代码认为是正确的。
GameSectinVM:
public class GameSectionVM
{
public string GameTitle { get; set; }
public string LogoFileName { get; set; }
public string Synopsis { get; set; }
}
ReleaseInfoVM
public class ReleaseInfoVM
{
public Int16 SectionID { get; set; }
public string ReleaseName { get; set; }
public string Platform { get; set; }
public string Publisher { get; set; }
public string Location { get; set; }
[HiddenInput]
public DateTime? ReleaseDate { get; set; }
[HiddenInput]
public string ReleaseDateText { get; set; }
public string DateReleased
{
get
{
return (ReleaseDate.HasValue) ? ReleaseDate.ToString() : ReleaseDateText;
}
}
}
这是我目前用来填充两个虚拟机的代码:
var model = (from s in db.Sections
join f in db.Files
on s.LogoFileID equals f.ID into s_f
where s.RouteName == SectionName
from x in s_f.DefaultIfEmpty()
select new GameSectionVM
{
GameTitle = s.Title,
LogoFileName = x.FileName,
Synopsis = s.Synopsis
}).Single();
var ReleaseInfo = db.Releases.All(r => r.SectionID == SectionID);
我会对代码进行映像以填充ReleaseData,当两个虚拟机组合在一起时,它将保持不变,而不是var ReleaseInfo
它将成为model.ReleaseInfo
Release.SectionID
FK
到Section.ID
绑定在一起
答案 0 :(得分:1)
如果这是父母 - > GameSectionVM
和ReleaseInfoVM
之间的子关系,最简单的方法是在ICollection<ReleaseInfoVM>
的属性中添加GameSectionVM
。
public class GameSectionVM
{
...
public ICollection<ReleaseInfoVM> ReleaseInfos {get;set;}
}
填充VM的代码:
// this var will evaluate to GameSectionVM
var model = (from s in db.Sections
...
}).Single();
model.ReleaseInfos = (from r in db.Releases
...
// Do your query logic to populate the ReleaseInfoVM tables here
);
答案 1 :(得分:0)
鉴于GameSectionVM
和ReleaseInfoVM
看起来彼此不一样,我认为你的意思是创建一个第三个ViewModel,它有一个GameSectionVM
作为属性和一个ReleaseInfoVM
个实例的集合作为另一个属性。
这应该是相当简单的:
public class CombinedVM
{
public GameSectionVM GameSection { get;set;}
public IEnumerable<ReleaseInfoVM> ReleaseInfos { get;set; }
}
...假设您已经检索了GameSectionVM
和ReleaseInfoVM
个实例列表,您可以像这样构建模型:
var newModel = new CombinedVM() { GameSection = model, ReleaseInfos = ReleaseInfo };