带有子关系的MVC多模型
本文关键字:MVC 模型 关系 | 更新日期: 2023-09-27 18:17:31
我有一个这样的模型:
客户端-它有许多位置-它可以有许多团队,一种一对多对多的关系。
我可以找到很多一对多关系的例子,但没有一个像这样。
问题是:我如何得到一个客户端对象与所有的位置和团队为这些位置?
以前,使用SQL,我会连接所有会给我一行的表,但我似乎不能这样做,即使使用ViewModel组合它们:(
public class Client
{
private System.Guid _id;
[HiddenInput(DisplayValue = false)]
public System.Guid ClientId {
get
{
if (_id == null || _id == Guid.Empty)
_id = Guid.NewGuid();
return _id;
}
set
{
_id = value;
}
}
[Required(ErrorMessage = "The Client Name is required")]
public String Name { get; set; }
public virtual ICollection<Location> Locations { get; set; }
}
public class Location
{
private System.Guid _id;
[HiddenInput(DisplayValue = false)]
public System.Guid LocationId {
get
{
if (_id == null || _id == Guid.Empty)
_id = Guid.NewGuid();
return _id;
}
set
{
_id = value;
}
}
[Required(ErrorMessage = "The Site Name is Required")]
public String Name { get; set; }
[Required(ErrorMessage = "The Address is required")]
public String Address { get; set; }
[Required(ErrorMessage = "The Postcode is required")]
public String Postcode { get; set; }
public virtual ICollection<EngagementTeam> Teams { get; set; }
}
public class EngagementTeam
{
private System.Guid _id;
[HiddenInput(DisplayValue = false)]
public System.Guid EngagementTeamId {
get
{
if (_id == null || _id == Guid.Empty)
_id = Guid.NewGuid();
return _id;
}
set
{
_id = value;
}
}
[Required(ErrorMessage = "The Team Name is required")]
public String Name { get; set; }
public virtual ICollection<Person> Members { get; set; }
}
我认为你混淆了你的数据或域模型与你的UI或视图模型。它们通常不是同一件事。
原因是视图模型倾向于更简单,并且只提供显示特定视图所需的数据。这一点很重要,因为视图模型是由模型绑定器在每次发回请求时重新创建的,如果你有一个非常复杂的模型,那么这使得模型绑定器很难创建。
你也认为你的模型是错误的。客户与团队没有任何关系。这不是一对多对多,这是两种关系,都是一对多。客户端与位置相关。地点与团队有关。客户与团队没有关系,除了通过位置。
所以你的客户端只是有一个位置的集合。你的Location有一组团队。您的团队可能有一个指向其位置的单一引用,而您的位置将有一个指向其客户端的单一引用。就是这样。