【发布时间】:2019-06-24 00:53:01
【问题描述】:
我正在尝试重置资产实体中的项目导航属性。
资产模型(删除所有不相关的内容):
public class Asset
{
public int Id { get; set; }
public int? ProjectId { get; set; }
public Project Project { get; set; }
}
重置逻辑:
var asset = await context.Assets.Include("Project").FirstAsync(a => a.Id == assetId);
asset.Project = null;
asset.ProjectId = null;
await context.SaveChangesAsync();
我将项目包含在查询中并尝试将 Project 和 ProjectId 设置为 null,但它没有在数据库中更新。此外,我已经尝试仅设置项目,仅将 ProjectId 设置为 null,但均无效。
对于这个问题有一些关于 SO 的相关问题,但对于所有这些问题, Include("xy") 似乎都可以解决问题。
【问题讨论】:
-
你能粘贴你得到的错误吗?
-
ProjectId是主键吗?如果是这样,我认为您不能将其设置为null。 -
只有当我想使用 Microsoft.EntityFrameworkCore.Proxies 进行延迟加载时才需要虚拟,但我不想延迟加载。据我所知,使用 .Include("xy") 它会急切地加载导航属性。
-
是的,我发现了问题。我设置 context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;在上下文生命周期的某个时刻。有趣的是,在我提出一个 SO 问题之后,这些事情总是出现,而不是在 xD 之前搜索问题的几个小时内出现
-
就可以了 :) 感谢您来回提出一些想法。