我正在使用EF Core处理数据(而且我是EF的新手).我有一个DbContext
,我用它从SQL Server获取数据.一旦将数据加载到内存中,我就会更改不同行上的值,但现在还不会将数据写回SQL Server(我想在用户只单击OK按钮时写入数据库).
下面就是正在发生的事情:我有一个名为Equipments
的表,它的列是FkIdType
.我将第FkIdType
行的值从NULL更改为5,例如:
var equ = DataAccess.GetEquipment(pkIdEqu);
equ.FkIdEquipmentType = (int)GVEquipmentTypes.GetFocusedRowCellValue(colPkId);
DataAccess
是一个帮助器类,它只执行
context.Where(x => x.PkId == pkID).FirstOrDefault();
在那之后,我想要获得一个全部Equipments
的列表,其中FkIdType
是5.查询如下:
var query = context.Equipments.Where(x => x.FkIdType == 5);
query.ToList();
问题就在这里.如果我放一个断点并判断context.Equipments
,我可以清楚地看到值已经改变.但是,查询不会返回任何内容(如果它是值为5的FkIdType
的唯一行).为什么?
我try 直接在数据库中更改值(使用SSMS手动更改),查询似乎实际上是在数据库中查找,而不是在本地上下文中查找.我不明白为什么.
以下是我try 过的:
- 强迫
ChangeTracker.LazyLoadingEnabled = false;
人 - 已try 使用
context.Database.BeginTransaction();
- 从"另一方"获取数据.我的意思是这样使用TYPE表:
Types.Where(x => x.PkId == FkIdType)
.Select(x => x.Equipments).ToList();
但同样奇怪的事情也会发生.如果我执行代码,列表就是空的.如果我"判断"Types
个对象,并在中断模式下打开"结果视图"属性,那么我会看到数据,然后查询返回一个包含预期数据的列表……为什么?