我目前在我的数据层中有一个长寿命的datacontext,如下所示:
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),有些只是更新了。我应该如何处理所有情况?
答案 0 :(得分:0)
“短暂生活”并不意味着“只要方法被执行就会存在”。它也可以表示“上下文至少与您的存储库一样长”。
这似乎是大多数实现中首选的选项:
public class DataRepository()
{
private NorthwindContext _context;
public DataRepository( NorthwindContext context )
{
this._context = context;
}
public Order GetOrder( int id )
{
return this._context.....
}
请注意,通过将上下文注入存储库,而不是为每个存储库创建上下文实例,您不仅可以在所有存储库方法中使用相同的上下文,还可以共享上下文的相同实例不同的存储库。