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约束。