gpt4 book ai didi

c# - 在 Entity Framework 中保存

转载 作者:太空狗 更新时间:2023-10-29 17:53:39 24 4
gpt4 key购买 nike

我已阅读 this文章,仍然误解关键时刻。我们不需要打电话

_context.SaveChanges()

在每个删除/更新/...操作中?

如果我更改任何实体的属性,SaveChanges() 是否将结果提交到数据库,或者我必须手动设置 EntityState.Modifyed

这是我的代码:

public class Repository<T> : IRepository<T> 
where T : class
{
private IDbContext _context;

public Repository(IDbContext context)
{
_context = context;
}

private IDbSet<T> DbSet
{
get
{
return _context.Set<T>();
}
}

#region IRepository<T> Members

public void Insert(T entity)
{
DbSet.Add(entity);
}

public void Delete(T entity)
{
DbSet.Remove(entity);
}

public IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate)
{
return DbSet.Where(predicate);
}

public IQueryable<T> GetAll()
{
return DbSet;
}

public T GetById(int id)
{
return DbSet.Find(id);
}
#endregion
}

public interface IDbContext
{
IDbSet<T> Set<T>() where T : class;

int SaveChanges();
void Dispose();
}

最佳答案

你问:

Don't we need call _context.SaveChanges() in every Delete/Update/... operations?

不,我们没有。调用 Delete 时,我们不会意外删除实体 - 我们将其标记为删除。

Update 相同,尽管您无需执行任何其他操作即可对实体进行所需的更改。所有属性(由默认模板生成)都将实现 INotifyPropertyChanged,因此它知道实体何时被修改。

所有实体(首先在数据库中 - 由默认模板自动生成)都有一个 State 属性。只要更改发生在 ObjectEntity 的范围内,此属性就由 ObjectContext 维护。

例如

Customer c;
using(var context = new MyEntityContext())
{
c = context.Customer.FirstOrDefault(); //state is now Unchanged
c.Name = "new name"; // this set the State to Modified
//context.SaveChanges(); // will persist the data to the store, and set the State back to unchaged
}

//if we look at our customer outside the scope of our context
//it's State will be Detacth
Console.WriteLine(c.State);

然后调用 SaveChanges 所有状态为Added DeletedModified 的实体都将进行更改在本地事务中持久化到数据库

编辑

如果一个实体被标记为删除,而您尝试修改它 - 您将得到一个 InvalidOperationException

关于c# - 在 Entity Framework 中保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15403673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com