我对实体框架比较陌生。下面是我用于通用 CRUD 功能的代码。
internal class clsRepository<T> where T : EntityObject
{
private ObjectContext objCtxt;
private ObjectSet<T> objSet;
public clsRepository()
{
objCtxt = new DAL.Entities();
objSet = objCtxt.CreateObjectSet<T>();
}
public clsRepository(ObjectContext context)
{
objCtxt = context;
objSet = objCtxt.CreateObjectSet<T>();
}
public T AddEntity(T entity)
{
objSet.AddObject(entity);
objCtxt.SaveChanges();
return entity;
}
public void UpdateEntity(T entity)
{
object ent;
if (!objCtxt.TryGetObjectByKey(entity.EntityKey, out ent))
{
objSet.Attach(entity);
objCtxt.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);
}
else
{
objCtxt.ApplyCurrentValues<T>(entity.EntityKey.EntitySetName, entity);
}
objCtxt.SaveChanges();
}
public void DeleteEntity(T entity)
{
object ent;
if (!objCtxt.TryGetObjectByKey(entity.EntityKey, out ent))
{
objSet.Attach(entity);
objCtxt.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Deleted);
}
objSet.DeleteObject(entity);
objCtxt.SaveChanges();
}
}
1)这是使用实体模型的有效方式吗?
2)
objCtxt.CreateObjectSet<T>()
:我假设这行代码将数据库中的所有实体加载到对象上下文中。这会导致任何性能问题吗?
任何人都可以提出更好的方法吗?谢谢你。