c# - 存储更新、插入或删除语句影响了意外的行数 (0) EntityFramework

标签 c# asp.net asp.net-mvc entity-framework

<分区>

当我尝试保存对上下文所做的更改时,我不断收到以下错误:

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

我有以下类(class):

人物

public class Person : IPerson
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Name
    {
        get
        {
            return FirstName + " " + LastName;
        }
        set{}
    }

    public string Email { get; set; }
    public DateTime? LastModified { get; set; }
    public virtual ICollection<Result> Results { get; set; }
}

用户资料

public class UserProfile : Person
{
    public UserProfile()
    {
        Faculty = new Faculty();
        Projects = new Collection<Project>();
        Results = new Collection<Result>();
    }
    public string UserName { get; set; }
    public string CNP { get; set; }
    public virtual Faculty Faculty { get; set; }
    public virtual ICollection<Project> Projects { get; set; }
}

结果

public abstract class Result:INamedEntity
{
    protected Result()
    {
        ResultType = new ResultType();
    }
    public int Id { get; set; }
    public string Name{get;set;}
    public virtual ResultType ResultType { get; set; }
    public virtual ICollection<Person> People { get; set; }
    public DateTime? LastModified { get; set; }
}

在我使用以下方法向上下文添加值之后:

_ctx.Users.Single(u => u.Id == userId).Results.Add(result);

调用 _ctx.SaveChanges() 时出现错误

将我的函数更新为:

public bool Save()
{

    try
    {
        _ctx.SaveChanges();
    }
    catch (OptimisticConcurrencyException)
    {
        ((IObjectContextAdapter)_ctx).ObjectContext.Refresh(RefreshMode.ClientWins,_ctx.Users);
        ((IObjectContextAdapter)_ctx).ObjectContext.Refresh(RefreshMode.ClientWins,_ctx.Results);
        _ctx.SaveChanges();
    }
    return true;
}

但是错误没有被捕获。 谢谢

最佳答案

将此添加到您的 edit.cshtml

@Html.HiddenFor(model => model.Id)

我遇到了这个问题,发现 ID 显示为 0,因为它不在页面上。

我的 ViewModel 上也有这个(我正在使用 View 模型方法)

[HiddenInput(DisplayValue = false)]
[Key]
public int Id { get; set; }

关于c# - 存储更新、插入或删除语句影响了意外的行数 (0) EntityFramework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20044828/

相关文章:

asp.net-mvc - 修复 'System.Web.Optimization.BundleCollection' 不包含 'EnableDefaultBundles' 错误的定义

c# - 如何防止类被构建到发布 DLL 中?

c# - 问号在 MVC 中意味着什么?

c# - 声明一个带有两个泛型参数的方法

c# - GridView中LinkBut​​ton的行索引

asp.net - 不同的端口号是否意味着不同的域?

c# - 关于线程池最大线程的说明

c# - 我无法弄清楚 RouteConfig.cs 文件

c# - 如何使用 SignalR Hubs 处理并发

c# - 从 MethodInfo 获取具有私有(private)(不可访问)类型的 Func<>