Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体配置-应填写其中一个字段_C#_Entity Framework_Ef Code First_Entity_Entity Framework 6 - Fatal编程技术网

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

C# 实体配置-应填写其中一个字段,c#,entity-framework,ef-code-first,entity,entity-framework-6,C#,Entity Framework,Ef Code First,Entity,Entity Framework 6,我在应用程序中使用实体框架代码优先的方法 我有下面的实体类 public class Filter : Entity { #region Property [Key] public int FilterID { get; set; } public int ClientID { get; set; } public virtual Client Client { get; set; }

我在应用程序中使用实体框架代码优先的方法

我有下面的实体类

 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");
        }
    }
公共类筛选器:实体
{
#区域属性
[关键]
public int FilterID{get;set;}
public int ClientID{get;set;}
公共虚拟客户端{get;set;}
公共int CSAID{get;set;}
公共虚拟用户登录CSA{get;set;}
public int VRAnalystID{get;set;}
公共虚拟用户登录{get;set;}
公共布尔值是默认值{get;set;}
public int UserID{get;set;}
公共虚拟用户登录LoggedInUser{get;set;}
public int QueueID{get;set;}
公共虚拟队列队列{get;set;}
#端域属性
}
公共类筛选器配置:EntityTypeConfiguration
{
公共筛选器配置()
{
this.HasKey(p=>p.FilterID);
this.Property(p=>p.FilterID).hasDatabaseGenerateOption(DatabaseGenerateOption.Identity).HasColumnName(“FilterID”);
本表为可更换的(“过滤器”);
}
}
我必须确保插入/更新此实体时应填写ClientID或CSAID或VRAnalysistID

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


如果无法在实体配置中设置,那么使用实体框架代码优先的方法实现相同功能的最佳实践是什么?

在模型类上实现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;
        }
公共IEnumerable验证(ValidationContext ValidationContext) { var results=新列表(); if(//一些检查) { 添加(新的ValidationResult(“一些消息”), 新[]{“TheNameofProperty”}); } 返回结果; }
如果我理解正确,在保存实体之前,至少应设置三个外键中的一个?我认为在EF中不可能。您应该实现自己的验证逻辑或使用SQL约束。