首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于实体中的“必需”导航属性,ModelState.IsValid是假的。

由于实体中的“必需”导航属性,ModelState.IsValid是假的。
EN

Stack Overflow用户
提问于 2018-12-29 18:09:36
回答 1查看 543关注 0票数 1

Required注释位于LessonQuestionDetails Entity-model中的一个导航属性中,它允许通过代码优先方法创建级联删除表,从而使ModelState.IsValid成为false。在没有Required注释的情况下,是否有办法设置级联删除。

实体-模型

代码语言:javascript
复制
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
}

控制器

代码语言:javascript
复制
[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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-29 18:13:48

您可以使用fluent API。

像下面这样的东西应该可以工作,但可能需要调整,就像在编辑器上写的那样,并没有测试它,但这是它的要点

代码语言:javascript
复制
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
     modelBuilder.Entity<LessonQuestion>()
        .HasOptional(c => c.LessonQuestion)
        .WithOptionalDependent()
        .WillCascadeOnDelete(true);
 }

但是,直接在API中使用实体框架模型是一个错误的设计。

您应该为API所需的属性使用视图模型,然后将它们映射到实体框架模型。永远不要直接公开实体框架模型,因为它只会导致问题,更改实体框架模型将需要应用程序范围的更改,包括使用API的应用程序,这将成为维护的噩梦。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53972122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档