LessonQuestionDetails 中的导航属性中的Required
批注实体模型,它可以通过代码优先方法实现级联删除表的创建< / strong>,导致ModelState.IsValid
变成false
。是否有一种解决方法可以设置不带Required
批注的层叠删除。
实体模型
public partial class LessonQuestionDetail
{
[Key, Column(Order = 0), DatabaseGenerated(DatabaseGeneratedOption.None)]
public int LessonID { get; set; }
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.None)]
public int QuestionNumber { get; set; }
[Key, Column(Order = 2), DatabaseGenerated(DatabaseGeneratedOption.None)]
public byte ChoiceNumber { get; set; }
public string Choice { get; set; }
public bool IsCorrect { get; set; }
[Required] // Sets the CASCADE constraint, while creating table
public virtual LessonQuestion LessonQuestion { get; set; }
}
public partial class LessonQuestion
{
public LessonQuestion()
{
this.LessonQuestionDetails = new List<LessonQuestionDetail>();
}
public virtual ICollection<LessonQuestionDetail> LessonQuestionDetails { get; set; }
//Other code
}
控制器
[HttpPost]
public ActionResult EditLessonQuestionDetails(LessonQuestion lq)
{
SQLContext context = new SQLContext();
int intChoiceNum=1;
var errors = ModelState.Values.SelectMany(v => v.Errors); // There are errors
var valid = ModelState.IsValid; // sets False
// Other code
}
答案 0 :(得分:3)
您可以使用流畅的API。
如下所示的方法应该可以工作,但是可能需要像在编辑器上编写的那样进行调整,并且没有对其进行测试,但这就是要点
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<LessonQuestion>()
.HasOptional(c => c.LessonQuestion)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
}
但是,直接将Entity Framework模型与API一起使用是一个不好的设计。
您应该将视图模型用于API所需的属性,然后将其映射到Entity Framework模型。切勿直接暴露Entity Framework模型,因为它只会导致问题,并且更改Entity Framework模型将需要在应用程序范围内进行更改,包括使用API的应用程序,这将成为维护噩梦的一个途径。