在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);
}

现在我的数据存储库是这样的:

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();
        }
    }
}

会更新关系吗?如果一些orderdetails是新的(还没有id),而另一些只是更新了呢?我该如何处理各种情况?

"Short - lived"并不意味着"只要方法被执行就存在"。它也可能意味着"上下文至少与存储库一样长"。

这似乎是大多数实现中首选的选项:

public class DataRepository()
{
    private NorthwindContext _context;
    public DataRepository( NorthwindContext context )
    {
        this._context = context;
    }
    public Order GetOrder( int id )
    {
        return this._context.....
    }

注意,通过将上下文注入到存储库中,而不是为每个存储库创建上下文实例,您不仅可以在所有存储库方法中拥有相同的上下文,而且还可以在不同的存储库之间共享上下文的相同实例。

相关内容

  • 没有找到相关文章

最新更新