带有子关系的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; }
    }

带有子关系的MVC多模型

我认为你混淆了你的数据或域模型与你的UI或视图模型。它们通常不是同一件事。

原因是视图模型倾向于更简单,并且只提供显示特定视图所需的数据。这一点很重要,因为视图模型是由模型绑定器在每次发回请求时重新创建的,如果你有一个非常复杂的模型,那么这使得模型绑定器很难创建。

你也认为你的模型是错误的。客户与团队没有任何关系。这不是一对多对多,这是两种关系,都是一对多。客户端与位置相关。地点与团队有关。客户与团队没有关系,除了通过位置。

所以你的客户端只是有一个位置的集合。你的Location有一组团队。您的团队可能有一个指向其位置的单一引用,而您的位置将有一个指向其客户端的单一引用。就是这样。