entity-framework - 实体框架核心入口状态在关系实体中没有改变
问题描述
我正在使用实体框架核心。我正在添加一个Widget
使用Dasboard
对象。并保存数据库。以下代码在 whenWidget
和Dashboard
id 类型为string
. 我将 id 的类型更改为Guid
(但我不知道这是否是问题的原因)。现在我正在保存更改错误。
数据库操作预计会影响 1 行,但实际上影响 0。数据可能已被修改或删除,因为实体已加载行
public async Task<Widget> AddWidget(WidgetCreateCommand command)
{
var dashboard = await _context.Dashboards.FirstOrDefaultAsync(s => s.Id == command.DashboardId);
var widget = new Widget(command.DashboardId, command.WidgetContentId, command.GridsterSettings);
dashboard.AddWidget(widget);
await _context.SaveChangesAsync(); // error is in here.
return widget;
}
实体是相关的:
public class Dashboard : Entity<Guid>
{
....
....
public ICollection<Widget> Widgets { get; private set; }
public void AddWidget(Widget widget)
{
if (Widgets.All(u => u.Id != widget.Id))
Widgets.Add(widget);
}
}
public class Widget : Entity<Guid>
{
...
public Dashboard Dashboard { get; private set; }
}
我查看了断点,并查看了_context.Entry(widget).State
is Detached
。但它应该是Added
。为什么_context.Entry(widget).State
不设置为EntityState.Added
自动?
如果我_context.Entry(widget).State = EntityState.Added;
手动设置,它可以工作。但我以前没有这样做。
解决方案
推荐阅读
- javascript - Javascript Screen WakeLock API 在 Windows 上不起作用
- python - 将电子邮件保存在物理文件夹中的 Python 脚本
- python - 如何将序列列表中的每个序列分别提供给 Tensorflow 上的 GRU
- opencv - cv::cuda::FastFeatureDetector 只接受 FastFeatureDetector::TYPE_9_16
- flutter - 是否可以从 syncfusion_flutter_charts 包中删除表?
- python - 使用 twilio 和烧瓶发送超过 1 张图像
- python - RROR:numpy.ndarray 大小已更改,可能表示二进制不兼容。预期来自 C 标头的 88,从 PyObject 获得 80
- python - 如何将字典传递给并发期货执行者
- amazon-web-services - 将策略附加到 SSH 隧道
- ruby-on-rails - Rails 审核了某些字段的更新和其他字段的所有回调