ModelState.IsValid имеет значение false из-за «обязательного» свойства навигации в Entity - PullRequest
0 голосов
/ 29 декабря 2018

Аннотация Required в свойстве навигации в LessonQuestionDetails Entity-модель , которая позволяет создание каскадно-удаленных таблиц с помощью подхода с первым кодом , имеет видв результате чего 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
}

1 Ответ

0 голосов
/ 29 декабря 2018

Вы можете использовать свободный 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, который становится кошмаром для обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...