在我的应用程序中,我的文件夹可以包含其他文件夹。 它们具有各种各样的属性,如下所示:

public class Folder
    {
        public Folder()
        {
            Sets = new Collection<Set>();
            Folders = new Collection<Folder>();
            Stage = Stage.one;
            IsArchived = false;
            DateCreated = DateTime.Now;
            }

        // Primitive Properties 

        [Required]
        [Key]
        public virtual int FolderId { get; set; }

        public virtual int? ParentFolderId { get; set; }

        [ForeignKey("ParentFolderId")]
        public virtual Folder ParentFolder { get; set; }

        [Required]
        public int UserId { get; set; }

        [Required]
        public virtual string Title { get; set; }

        public virtual string Details { get; set; }

        [Required]
        public virtual Stage Stage { get; set; }

        [Required]
        public virtual bool IsArchived { get; set; }

        [Required]
        public virtual DateTime DateCreated { get; set; }

        [ForeignKey("FolderId")]
        public virtual ICollection<Set> Sets { get; set; }

        [ForeignKey("ParentFolderId")]
        public virtual ICollection<Folder> Folders { get; set; }

    }

现在,应用程序的每个用户都有一个“主文件夹”-一个起点。 但是,主文件夹不需要上述属性的一半。 我认为我有两个选择:

1)使用此实体,只需添加“ isHomeFolder”作为属性。 这很简单,但是意味着我将通过有线方式为JSON请求发送空白的[Required]属性-主文件夹没有标题,无法存档等。

2)创建仅具有必填字段的另一个实体,并在其中复制必需的属性。 这似乎不是很干,但是感觉比第一种更好。

作为初学者,我不确定是否还有其他选择。 这里有标准的方法/解决方案吗?

如果很重要,我将基于Entity Framework Code-First + WebAPI。

===============>>#1 票数:0

2)创建仅具有必填字段的另一个实体,并在其中复制必需的属性。 这似乎不是很干,但是感觉比第一种更好。

这就是为什么ViewModel对于避免不必要的(过度)过帐,不必要的过帐值很重要的原因。 此外,为了避免实体中的必填字段(您不希望它们或它们不适用于“特定视图”)。 实体不一定转化为单一视图。 您的案子就是一个生动的例子。

这里有标准的方法/解决方案吗?

如前所述,创建一个视图模型并仅复制捕获输入所需要的属性。 即使将数据注释放在相同的属性上,也不会重复您自己。 视图模型上的数据注释用于视图验证 您实体上的注释用于域验证 IMO,这不是重复,因为您的UI与域是不同的层。

===============>>#2 票数:0

也许您应该创建一个包含通用属性的类。 然后,您可以使用两个类来实现从第一个类的继承。

===============>>#3 票数:0 已采纳

它取决于您将要拥有的主文件夹数与总文件夹数之比。 如果您将拥有比主文件夹更多的第二级文件夹(并且您很有可能会),那么为什么仅仅为了10%或20%或请求而烦恼实现另一种结构。

至于必填字段为空–只需使用一些不会在服务器端进行解析的默认值,就可以了;)。

  ask by RobVious translate from so

未解决问题?本站智能推荐: