首页 > 解决方案 > 实体框架核心入口状态在关系实体中没有改变

问题描述

我正在使用实体框架核心。我正在添加一个Widget使用Dasboard对象。并保存数据库。以下代码在 whenWidgetDashboardid 类型为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).Stateis Detached。但它应该是Added。为什么_context.Entry(widget).State不设置为EntityState.Added自动?

如果我_context.Entry(widget).State = EntityState.Added;手动设置,它可以工作。但我以前没有这样做。

标签: entity-frameworkentity-framework-core

解决方案


推荐阅读