【问题标题】:How to make ICollection<Child Entities> Required. How如何使 ICollection<子实体> 成为必需。如何
【发布时间】:2012-02-09 20:36:49
【问题描述】:

这是我的主实体,它将包含语言列表

public partial class WebSite
    {
        public WebSite()
        {
            this.WebSiteLanguages = new HashSet<WebSiteLanguage>();
        }

        public int Id { get; set; }
        public Nullable<int> WLUserID { get; set; }
        public string DomainName { get; set; }
        public Nullable<bool> IsActive { get; set; }
        //[Required]       
        public virtual ICollection<WebSiteLanguage> WebSiteLanguages { get; set; }
    }

我的 WebSiteLanguage 子类是

public partial class WebSiteLanguage
    {
        public int Id { get; set; }
        public string LanguageName { get; set; }
        public Nullable<int> WebSiteID { get; set; }
        public bool IsDefault { get; set; }

        public virtual WebSite WebSite { get; set; }
    }

在我看来,我可以在 ajax 调用中添加多种语言。

我的问题是:
是否可以制作

公共虚拟ICollection WebSiteLanguages { get; 放; }

必填。如果没有创建 WebSiteLanguage,则网站实体无效。

非常感谢。

【问题讨论】:

  • 我会开发自定义验证属性。在我看来,这是最可重用的解决方案。

标签: entity-framework-4.1 asp.net-mvc-4


【解决方案1】:

根据http://blogs.msdn.com/b/adonet/archive/2011/05/27/ef-4-1-validation.aspx 的帖子,导航属性被排除在构面验证之外,“因为您可以设置关联的 FK 值,并且导航属性将在 SaveChanges() 上设置”。要验证导航属性不为空,您可以:

  • 创建一个对其进行验证的自定义属性(无论是在类型上还是在属性上)
  • 实现执行上述操作的 IValidatableObject 接口
  • 覆盖 DbContext.ValidateEntity 受保护的方法,以便它验证属性不为空,如果是这种情况,则调用 base.ValidateEntity() 来验证其他属性(有关详细信息,请参阅:http://blogs.msdn.com/b/adonet/archive/2010/12/15/ef-feature-ctp5-validation.aspx

第 3 种解决方案似乎是最干净的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2015-12-16
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多