Entity Framework操作数据库失败解决方法(持续更新)

今天用EF来删除数据的时候提示:
The object cannot be deleted because it was not found in the ObjectStateManager.

之后再网上找到了解决方法(附上链接:https://stackoverflow.com/questions/15945172/the-object-cannot-be-deleted-because-it-was-not-found-in-the-objectstatemanager)


上面的红线框中的数据上下文是不同的对象,导致了出错;

最后更改为同一个数据库上下文类就行了

如下图


2018-03-28更新:

情景描述:当我在使用web api来对数据修改的时候,而在使用过程中提示如下错误:

exceptionMessage:"Attaching an entity of type 'FruitShoppingSystem.Models.Business' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate."
exceptionType:"System.InvalidOperationException"

message:"An error has occurred."

后面发现了也是之前获取到的数据没有进行更改而更改了传入的数据才出错的:

错误之前的代码如下:


更改之后如下:修改之后就没问题了

        public async Task<IHttpActionResult> PutBusiness(Guid id, Business business)
        {
            if (!ModelState.IsValid)
            {
                return Ok(status.GetResult("No", "数据验证失败!"));
            }

            if (id != business.Id)
            {
                return Ok(status.GetResult("No", "所选商家不存在!"));
            }

            var b = await businessRepository.Get(id);
            b.Email = business.Email;
            b.Address = business.Address;
            b.PhoneNumber = business.PhoneNumber;
            b.Person = business.Person;
            b.Name = business.Name;

            try
            {
                await businessRepository.Update(b);
            }
            catch (DbUpdateConcurrencyException ex)
            {
                if (!BusinessExists(id))
                {
                    return Ok(status.GetResult("No", "所选商家不存在,错误信息为:" + ex.Message));
                }
                else
                {
                    return Ok(status.GetResult("No", "发生异常,异常信息为:" + ex.Message));
                }
            }

            return Ok(status.GetResult("Ok", "修改商家信息成功!"));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Entity Framework 操作数据库的示例代码: 1. 首先,确保你已经安装了 Entity Framework NuGet 包。 2. 创建一个实体类,表示数据库中的表。例如,假设有一个名为 "Employee" 的表,包含字段 "Id"、"Name" 和 "Salary",你可以创建以下实体类: ```csharp public class Employee { public int Id { get; set; } public string Name { get; set; } public decimal Salary { get; set; } } ``` 3. 创建一个继承自 DbContext 的派生类,表示数据库的上下文。例如,创建一个名为 "EmployeeContext" 的类: ```csharp public class EmployeeContext : DbContext { public DbSet<Employee> Employees { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 配置数据库连接字符串 optionsBuilder.UseSqlServer("YourConnectionString"); } } ``` 4. 在你的代码中使用 DbContext 对象来操作数据库。例如,可以执行查询、插入、更新和删除等操作: ```csharp using (var context = new EmployeeContext()) { // 查询所有员工 var employees = context.Employees.ToList(); // 插入新员工 var newEmployee = new Employee { Name = "John Doe", Salary = 5000 }; context.Employees.Add(newEmployee); context.SaveChanges(); // 更新员工薪资 var employeeToUpdate = context.Employees.FirstOrDefault(e => e.Id == 1); if (employeeToUpdate != null) { employeeToUpdate.Salary = 6000; context.SaveChanges(); } // 删除员工 var employeeToDelete = context.Employees.FirstOrDefault(e => e.Id == 2); if (employeeToDelete != null) { context.Employees.Remove(employeeToDelete); context.SaveChanges(); } } ``` 以上代码演示了使用 Entity Framework 进行基本的数据库操作。你可以根据实际需求进行扩展和修改。记得在使用前配置正确的数据库连接字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值