2012-10-23 44 views
0

我想使用帶有窗體的實體框架保存記錄。在數據庫中,我有許多相似的表格;他們都有自動增量ID列和一個字符串列。我想要的是創建一組按鈕,當它們中的一個被按下時,它用指定的表格填充列表框。另一個固定的按鈕會將固定文本框中的字符串插入到先前按下的按鈕所選的表格中。用一個按鈕選擇一個數據庫表,並用另一個按鈕插入到其中

問題是我無法在第二個按鈕中使用已創建的上下文項目。

下面是一個在左邊的按鈕代碼:

private void btnBB_Click(object sender, EventArgs e) 
    { 
     lbItems.DataSource = GsmContext.bbler; 
     lbItems.DisplayMember = "bb"; 
     bb = new bbler(); 
     bb.bb = txtItem.Text; 
     GsmContext.AddTobbler(bb); 
    } 

,這裏是保存在文本框中的項目代碼:

private void SaveItem(object sender, EventArgs e) 
    { 
     if (txtItem.Text == string.Empty) 
     { this.errorProvider1.SetError(txtItem, "Değer girin"); } 
     else 
     { 
      try 
      { 
       GsmContext.SaveChanges(); 
       txtItem.Clear(); 
      } 
      catch (SqlException x) 
      { 
       MessageBox.Show(x.Message); 
      } 
     } 
    } 

enter image description here

+0

那麼是什麼問題? –

+0

我想在另一個按鈕單擊事件中使用上下文項目。 – Bora

回答

0

這是我得到了什麼。我的實體框架模型定義了數據庫中的所有類。然後我創建一個接口IRepository和一個DataRepository類。

public interface IRepository<T> : IDisposable where T : class 
{ 
    IQueryable<T> Fetch(); 
    IEnumerable<T> GetAll(); 
    IEnumerable<T> Find(Func<T, bool> predicate); 
    T Single(Func<T, bool> predicate); 
    T First(Func<T, bool> predicate); 
    void Add(T entity); 
    void Delete(T entity); 
    void Attach(T entity); 
    void Detach(T entity); 
    void UpdateChanges(T entity); 
    void SaveChanges(); 
    void SaveChanges(SaveOptions options); 

} 


public class DataRepository<T> : IRepository<T> where T : class 
{ 

    private ObjectContext _context; 

    private IObjectSet<T> _objectSet; 

    public DataRepository() 
     : this(new ModelContainer()) //ModelContainer is the name of the EF model class. 
    { 
    } 

    public DataRepository(ObjectContext context) 
    { 
     _context = context; 
     _objectSet = _context.CreateObjectSet<T>(); 
    } 

    public IQueryable<T> Fetch() 
    { 
     return _objectSet; 
    } 

    public IEnumerable<T> GetAll() 
    { 
     return Fetch().AsEnumerable(); 
    } 

    public IEnumerable<T> Find(Func<T, bool> predicate) 
    { 
     return _objectSet.Where<T>(predicate); 
    } 

    public T Single(Func<T, bool> predicate) 
    { 
     return _objectSet.Single<T>(predicate); 
    } 

    public T First(Func<T, bool> predicate) 
    { 
     return _objectSet.First<T>(predicate); 
    } 

    public void Delete(T entity) 
    { 
     if (entity == null) 
     { 
      throw new ArgumentNullException("entity"); 
     } 

     _objectSet.DeleteObject(entity); 
    } 

    public void Delete(Func<T, bool> predicate) 
    { 
     IEnumerable<T> records = from x in _objectSet.Where<T>(predicate) select x; 

     foreach (T record in records) 
     { 
      _objectSet.DeleteObject(record); 
     } 
    } 

    public void Add(T entity) 
    { 
     if (entity == null) 
     { 
      throw new ArgumentNullException("entity"); 
     } 

     _objectSet.AddObject(entity); 
    } 

    public void Attach(T entity) 
    { 
     _objectSet.Attach(entity); 
    } 

    public void Detach(T entity) 
    { 
     _objectSet.Detach(entity); 
    } 

    public void UpdateChanges(T entity) 
    { 
     Add(entity); 
     _context.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified); 
     SaveChanges(); 
    } 

    public void SaveChanges() 
    { 
     _context.SaveChanges(); 
    } 

    public void SaveChanges(SaveOptions options) 
    { 
     _context.SaveChanges(options); 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      if (_context != null) 
      { 
       _context.Dispose(); 
       _context = null; 
      } 
     } 
    } 
} 

然後選擇記錄是這樣的:

public IList<MyDbClass> GetMyDbClassData() 
    { 
     IList<MyDbClass> myDbClassData = null; 
     using (IRepository<MyDbClass> repository = new DataRepository<MyDbClass>()) 
     { 
      myDbClassData = (from x in repository.GetAll() 
          select x).ToList(); 
     } 
     return myDbClassData; 
    } 

要創建一個新的紀錄:

public void CreateUser(User user) 
    { 
     using (IRepository<User> repository = new DataRepository<User>()) 
     { 
      repository.Add(user); 
      repository.SaveChanges(); 
     } 
    } 
+0

感謝您的回答,這對我來說太複雜了。我知道這個問題已經搞砸了,但我不知道該怎麼說。 – Bora

+0

你能告訴我什麼是你的應用程序中的GSMContext類? –

+0

它是一個實體對象。 – Bora

相關問題