0

我想使用带有 Windows 窗体的实体框架保存记录。在数据库上,我有许多彼此相似的表;它们都有自动增量 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);
            }
        }
    }

在此处输入图像描述

4

1 回答 1

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();
        }
    }
于 2012-10-23T12:52:17.667 回答