首页 > 解决方案 > 如何设置是手动为EF中的虚拟属性修改的,我已经知道如何设置普通属性和集合

问题描述

我正在寻找一种方法来手动修改实体框架中的虚拟属性。

目前,我知道如何设置普通属性,但是当我在 PropertyInfo 类中导航属性时,我只能在将属性设置为已修改时找到 GetMethod.IsVirtual。

 public class Student
{
    public Student()
    {
        this.Courses = new HashSet<Course>();
    }



    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public decimal Height { get; set; }
    public float Weight { get; set; }
    public byte[] RowVersion { get; set; }



    public int? GradeId { get; set; }



    public virtual Grade Grade { get; set; }



    public virtual StudentAddress Address { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
}

我只想更新标记为已修改的字段,在此示例中,我尝试使用实体框架将 ICollection 标记为已修改,

ctx.Entry(student).Property(x => x.Courses).IsModified = true;

我得到了这个例外

System.ArgumentException:“学生”类型的“课程”属性不是原始属性或复杂属性。Property 方法只能用于原始或复杂属性。使用参考或收集方法。

标签: c#asp.net-mvcentity-framework

解决方案


因为IsModifed不适用于集合,所以它适用于单个属性


推荐阅读