Context对象不检索更改

时间:2014-06-05 06:11:34

标签: c# wpf entity-framework

我有一个WPF应用程序,我在其中使用Entity Framework进行数据访问。我有一个数据服务类,我在其中查询和检索我的数据库中的一些集合

这是我的代码:

class ProductDataService:IProductDataService
{
    /// <summary>
    /// Context object of Entity Framework model
    /// </summary>
    private R_MaizeEntities Context { get; set; }

    //Constructor
    public ProductDataService()
    {
        Context = new R_MaizeEntities();
    }

    public IEnumerable<TblProduct> GetAllProducts()
    {
        var q = from p in Context.TblProducts
                 where p.IsDel == false
                 select p;

        return q.AsEnumerable();

        // This code working fine
        //using(var context=new R_MaizeEntities())
        //{
        //    var q = from p in context.TblProducts
        //            where p.IsDel == false
        //            select p;

        //    return new ObservableCollection<TblProduct>(q);
        //}
    }
}

这是我的观点模型:

public class ProductViewModel : WorkspaceViewModel
{
    //Constructor
    Public ProductViewModel()
    {
       LoadProductCollection();
    }

    private IProductDataService _dataService;
    public IProductDataService DataService
    {
        get
        {
            if (_dataService == null)
            {
                if (IsInDesignMode)
                {
                    _dataService = new ProductDataServiceMock();
                }
                else
                {
                    _dataService = new ProductDataService();
                }
            }
            return _dataService;
        }

    }

    private ObservableCollection<TblProduct> _productRecords;
    public ObservableCollection<TblProduct> ProductRecords
    {
        get { return _productRecords; }
        set
        {
            _productRecords = value;
            RaisePropertyChanged("ProductRecords");
        }
    }

    private void LoadProductCollection()
    {
        var q = DataService.GetAllProducts();
        this.ProductRecords = new ObservableCollection<TblProduct>(q);
    }
}

我的问题:当我更新现有的product对象并调用LoadProductCollection方法来刷新我的ProductRecord集合(我在视图中绑定到ListView)时,该集合我没有更新我所做的更改,但数据库已更新了更改。

在我的ProductDataService上我将上下文声明为属性并在构造函数中初始化它,在GetAllProducts方法上我使用该上下文属性对象来检索我的集合,这不会得到我的更改回来,相反,如果我在Using语句中使用上下文(在我注释掉的代码中),我得到了更改的集合。

为什么我以前的方法无法检索更改?

1 个答案:

答案 0 :(得分:1)

可见的区别在于,在您以前的方法中,每次调用方法时,都使用通过构造函数创建的相同数据上下文对象。

在您注释掉的方法中,每次调用GetAllProductsMethod()时,都会在using语句中创建上下文的新对象。希望它有所帮助。