不使用saveChanges更新DBSet

时间:2018-01-23 16:57:23

标签: c# .net entity-framework transactions entity-framework-6

我尝试达到以下目的:

  • 将新实体添加到DbContext的数据集中。
  • 不执行SaveChanges,因为插入后出现任何错误,新条目不应该转到数据库
  • 但是我需要稍后搜索新条目是否在Customer集合中

以下我现在拥有的内容:

public virtual DbSet<Customer> Customers { get; set; }

_context.Customers.Add(customer);
// NO _context.SaveChanges();
// ...
var existsingUser = _context.Customers
        .FirstOrDefault(x => x.CodeCustomer == customer.CodeCustomer);
// existsingUser = null, and should be valid populated object

如果我执行SaveChanges,则existsingUser不再为null,但数据将保存到数据库中。

_context.Customers.Add(customer);
_context.SaveChanges();
// ...
var existsingUser = _context.Customers
        .FirstOrDefault(x => x.CodeCustomer == customer.CodeCustomer);
// existsingUser = has object

是否有任何可能的解决方案真的&#39;将客户添加到Customers集合,而不使用saveChanges()? 如果是的话,请告诉我,

2 个答案:

答案 0 :(得分:5)

您可以查看Local属性。来自文档:

  

此属性返回一个ObservableCollection,其中包含当前由给定DbSet的上下文跟踪的所有Unchanged,Modified和Added对象。

例如:

var existsingUser = _context.Customers
    .Local
    .FirstOrDefault(x => x.CodeCustomer == customer.CodeCustomer);

答案 1 :(得分:-1)

如果没有SaveChanges(),则无法添加到集合中。 _context.Customers.Add(customer)表示您将此对象标记为要添加到数据库。在机舱下,EF上下文的工作方式类似于交易。您可以进行大量操作,但只有SaveChanges()保存到数据库。

_context.Customers.FirstOrDefault从数据库请求数据。

我希望它可以帮到你。