为什么我不能从库
问题描述:
最近添加的对象(尚未保存在数据库中)我正在开发一个asp.net mvc4应用程序,其中存储库和工作模式的实施模式。我想要一些解决方案来从存储库中获取新添加的数据,这意味着我希望能够在数据保存到数据库之前操作数据。为什么我不能从库
我学会喜欢对象是在EF更改跟踪机制可用,所以他们应该是可用的,尽管它尚未保存到数据库中。通过保持这一点只有我做下面的东西
下面是我的控制器......
Public void save(Order orderdata)
{
if(orderdata.Id > 0)
{
....
....
.... // after validating the data's I will be calling the Save() service method which i mentioned below.
save(orderdata,false); //Calling service method to attach data to repository
}
//after attaching the orderdata to reposistory i am calling a private method to modify above freshly added orderdata(i.e., orderdata which is recently added into repository but not saved into database)
UpdateOrder(order)
}
下面是我的私有方法...
private void UpdateOrder(Order order)
{
if (order != null)
{
var orderRequest = GetOrderRequest<Order>(x => x.TrackingNumber == order.TrackingNumber); //calling GetOrderRequest() service method which i mentioned below
if (orderRequest != null)
{
...
...// after some validations only i need to assign a status to newly added order.
orderRequest.Status = "assigned";
}
}
}
}
下面是我的服务方法的实现...
public void Save(Order obj, bool Commit = true)
{
if (obj.Id > 0)
{
// Adding Order obj to repository.
OrderRepository.Attach(obj);
}
else
OrderRepository.Add(obj);
// Note: While I am calling my save() service method am passing commit as 'False' in order to prevent it from saving into database so that after some transaction i will finally save all the data into database.
if (Commit)
Commit();
}
public IQueryable<T> GetOrderRequest<T>(Expression<Func<T, bool>> predicate = null) where T : WorkRequest
{
var query = OrderRepository.FindAll().OfType<T>();
if (predicate != null)
query = query.Where(predicate);
return query; //Here I am expecting the newly added data
}
现在我的问题是我想访问存储库中新增加的数据来更新吃了我的订单状态。但我无法这样做,因为GetOrderRequest总是返回null。我在做任何错误的事情,还是有任何其他方式从知识库中获取新增实体。请给我一些建议,在这...
答
我用这个在我Respository
类访问上下文里面的内容。 并不意味着它没有持续。只是意味着它在上下文中。 但这对你来说可能还是够用的。 如果是由数据库生成的ID,按键访问具有挑战性;-) 但除此之外,收集非常有用。
// ef offers Local property, handy to see inside context.
public ObservableCollection<TPoco> Local {
get { return Context.Set<TPoco>().Local; }
}
所以,你现在可以LINQ了......
repository.Local.Where(t=>t.field == 'X')