实体配置 - 应填写其中一个字段

时间:2014-11-20 06:49:07

标签: c# entity-framework ef-code-first entity entity-framework-6

我在我的应用程序中首先使用Entity Framework代码。

我有以下实体类..

 public class Filter : Entity
    {
        #region Property

        [Key]
        public int FilterID { get; set; }

        public int ClientID { get; set; }
        public virtual Client Client { get; set; }

        public int CSAID { get; set; }
        public virtual UserLogin CSA { get; set; }

        public int VRAnalystID { get; set; }
        public virtual UserLogin VRAnalyst { get; set; }

        public bool IsDefault { get; set; }

        public int UserID { get; set; }
        public virtual UserLogin LoggedInUser { get; set; }

        public int QueueID { get; set; }
        public virtual Queue Queue { get; set; }

        #endregion Property

    }

 public class FilterConfiguration : EntityTypeConfiguration<Filter>
    {
        public FilterConfiguration()
        {
            this.HasKey(p => p.FilterID);
            this.Property(p => p.FilterID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).HasColumnName("FilterID");

            this.ToTable("Filter");
        }
    }

我必须确保填写ClientID或CSAID或VRAnalystID以插入/更新此实体。

如何设置实体配置以实现相同的目标?

如果无法在实体配置中设置此项,那么使用Entity Framework代码第一种方法实现相同功能的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

在模型类上实现IValidatableObject接口。然后,您可以在方法中编写代码,以验证其中一个代码是否具有值。

  public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            var results = new List<ValidationResult>();

            if (//some checks)
            {
                results.Add(new ValidationResult("Some Message",
                                                 new[] {"TheNameOfTheProperty"}));
            }

            return results;
        }