c# - 实体框架附加/更新混淆 (EF Core)
问题描述
据我了解,当调用“更新”时,特定实体中的每个属性都会被修改。
另一方面,“附加”方法以“未修改”状态启动实体。然后,当对特定属性进行操作时,仅修改该特定属性。所以“附加”对单个属性更改更有用,而“更新”在您要更新实体中的每个属性时更有用(我的理解可能是错误的)。
但是,我不明白的是,在属性更改期间都没有调用这两种方法时会发生什么。例如,考虑一个名为“students”的表的示例:
student.City = "Calgary";
student.Name = "John Smith";
database.SaveChanges();
由于我们没有将实体中的任何属性标记为已修改,因此上述代码生成的查询有何不同?
解决方案
考虑以下代码:
students entity = new students() {
Id = 1,
City = "New York",
Name = "Sam"
};
using(SomeContext ctx = new SomeContext())
{
ctx.Entry(entity).State = EntityState.Modified;
ctx.SaveChanges();
}
假设我们在数据库中有一条 id = 1 的记录,上面的代码将更新数据库中的那个实体。
Attach
当您知道一个实体已经存在于数据库中但想要进行一些更改,同时在您已经进行更改时将状态更改为已修改时使用。
推荐阅读
- excel-formula - Excel 公式计算过滤列中前 n% 可见行的总和
- python - 如何使用 pandas 搜索和识别 csv 文件中的浮点值?
- c# - 使用日期时间格式更正 FIeldCoverter Filehelpers
- swift - 如何使用 guard let 写这个条件
- regex - 使用正则表达式查找句子的第一个字母和符号
- mysql - 以编程方式连接到 RDS MySQL(NodeJs、Java) - ER_ACCESS_DENIED_ERROR: Access denied for user
- android-espresso - 方法 BoundedMatcher.describeTo() 是调用,但 matchesSafely() 不是调用。怎么可能?
- vhdl - GHDL模拟器不支持没有错误的vhdl属性?
- flutter - 向 ListView 添加垂直和水平滚动
- android - 正则表达式匹配总是返回 false