簡體   English   中英

在LINQ to SQL中使用短期數據上下文

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM