c# - 如何设置是手动为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 方法只能用于原始或复杂属性。使用参考或收集方法。
解决方案
因为IsModifed
不适用于集合,所以它适用于单个属性
推荐阅读
- java - Java.time - 解析一个月的名称不起作用
- javascript - 如何获取 ajax 响应的属性
- c# - 从 REST Web 服务返回 CSV 文件作为 C# 中的流
- reactjs - 使用 TypeScript 在 create-react-app 中的故事书
- c# - WebClient 抛出 SocketException(无效参数)
- sas - 在 proc tabulate (SAS) 的顶列中添加行百分比
- javascript - 从 vue-i18n 设置的 vuejs 默认属性
- haskell - 我在哪里可以找到 javadoc 样式的 Haskell 包文档?
- java - 如何从 Kproperty 获取 KClass?
- python-3.x - 尝试在 python3 上安装 Selenium 时出现问题