[英]using short-lived datacontext with LINQ to SQL
我目前在數據層中的數據上下文如下所示:
public class DataRepository
{
private readonly NorthwindDatacontext db;
public DataRepository()
{
db = new NorthwindDatacontext();
}
public void insert(Order o)
{
db.Oreder.InsertOnSubmit(o);
db.SubmitChanges();
}
}
從我的理解來看,最好使用短期數據上下文,但是我不了解的是在處理短期數據上下文時,我將如何處理下一個示例。
客戶端上執行此操作的一些方法:
public void AddOrderDetails(IEnumrable<OrderDetails> od, Order o)
{
DataRepository repo = new DataRepository();
o.OrderDeatils.AddRange(od);
repo.Update(o);
}
現在我的DataRepository是這樣的:
public class DataRepository
{
public Order GetOrder(int id)
{
using ( var db = New NorthwindDataContext() )
{
db.ObjectTrackingEnabled = false;
var order = db.Oreder.Where(o => o.id == id ).SingleOrDefault();
return order;
}
}
public void Update (Order o)
{
using ( var db = New NorthwindDataContext() )
{
db.Order.Attach(o,true);
db.SubmitChanges();
}
}
}
會更新關系嗎? 如果某些OrderDeatils是新的(尚無ID),而有些剛剛更新,該怎么辦? 我應該如何處理所有情況?
“壽命短”並不表示“只要方法執行就可以生存”。 這也可能意味着“上下文的生存時間至少與您的存儲庫一樣長”。
這似乎是大多數實現中首選的選項:
public class DataRepository()
{
private NorthwindContext _context;
public DataRepository( NorthwindContext context )
{
this._context = context;
}
public Order GetOrder( int id )
{
return this._context.....
}
請注意,通過將上下文注入存儲庫中,而不是為每個存儲庫創建上下文實例,不僅在所有存儲庫方法中都具有相同的上下文,而且還可以在不同存儲庫之間共享相同的上下文實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.