8,497
社区成员
发帖
与我相关
我的任务
分享
public static bool Add<T>(this ObjectContext db, T item) where T : EntityObject
{
db.CreateObjectSet<T>().AddObject(item);
return db.SaveChanges() > 0; }
public static bool Delete<T>(this ObjectContext db, object itemId) where T : EntityObject
{
var entity = TryGetObjectByKey<T>(db, itemId);
if (entity != null)
{
db.CreateObjectSet<T>().EntitySet.Name.DeleteObject(entity);
return db.SaveChanges() > 0;
}
return false;
}
即使重合名过,4.0以上也可以直接用db.CreateObjectSet<T>().EntitySet.Name取得,用不着什么反射
CRUD就有了
public static T TryGetObjectByKey<T>(this ObjectContext db, string entitySetName, string keyName, object keyValue) where T : EntityObject
{
object entity;
var key = new EntityKey(db.DefaultContainerName + "." + entitySetName, keyName, keyValue);
if (db.TryGetObjectByKey(key, out entity))
{
return (T)entity;
}
return default(T);
}
public static IQueryable<T> GetEntityQuery<T>(
this ObjectContext dataContext,
string entitySetName,
string includeTable,
Expression<Func<T, bool>> predicate)
where T : EntityObject
{
var dataQuery = dataContext.CreateQuery<T>(entitySetName);
IQueryable<T> query = dataQuery;
if (!string.IsNullOrEmpty(includeTable))
{
query = dataQuery.Include(includeTable);
}
if (predicate != null)
{
query = query.Where(predicate);
}
return query;
}
//其中的entitySetName就是实体集名称,如果没有重命名过,默认与数据库表名相同,也就是typeof(T).Name
IEnumerable<int> users = mdc.ExecuteQuery<int>("select ID from userlist");
如果你需要返回多列的值,就不能用object了,建议你需要定义一个类来实现:
IEnumerable<Users> users = mdc.ExecuteQuery<Users>("select * from userlist");