我想使用带有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);
}
}
}
答案 0 :(得分: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();
}
}