当前位置:编程学习 > C#/ASP.NET >>

ef封装了泛型的增删改,但是删除的批量删除不知道该怎么判断


public class BaseDal<T> where T:class,new()
    {
        public ObjectContext db = DALFactory.EfContextFactory.GetEfContext();
        public virtual T Add(T entitie)
        {
            db.CreateObjectSet<T>().AddObject(entitie);
            return entitie;
        }

        public virtual int EditEntitie(T entitie)
        {
            db.CreateObjectSet<T>().Attach(entitie);
            db.ObjectStateManager.ChangeObjectState(entitie, System.Data.EntityState.Modified);
            return 1;
        }

        public virtual int DelEntitie(T entitie)
        {
            db.CreateObjectSet<T>().DeleteObject(entitie);
            return 1;
        }
        public virtual int DelEntities(params int[] ids)
        {
            foreach (var item in ids)
            {

                //T entitie = new T();
                //entitie.ID = item;  //这里是使用不了ID
                //db.ObjectStateManager.ChangeObjectState(entitie, System.Data.EntityState.Deleted);
            }
            return ids.Count();
        }
}

除非约束泛型T的类型为所有Model类型的父类并且有个ID的属性。但是我的EF不是5.0的,生成的Model不是TT模板生成的,不知道咋修改。有反射的办法可以做。但是应该怎么反射啊? --------------------编程问答-------------------- db.DeleteObjects(context.Products.Where(p => ids.Contains(p.ID))); --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
db.DeleteObjects(context.Products.Where(p => ids.Contains(p.ID)));

已解决。p点不出ID。是个泛型。
用下面这种方法解决的。
string val=p.GetType().GetProperty(属性字段名).GetValue(p, null).ToString() --------------------编程问答--------------------
引用 2 楼 liyajin12300 的回复:
Quote: 引用 1 楼 caozhy 的回复:

db.DeleteObjects(context.Products.Where(p => ids.Contains(p.ID)));

已解决。p点不出ID。是个泛型。
用下面这种方法解决的。
string val=p.GetType().GetProperty(属性字段名).GetValue(p, null).ToString()


这样不可以吧。只能在Linq To Objects运行

你应该构造表达式树

参考
http://bbs.csdn.net/topics/390534518 --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
Quote: 引用 2 楼 liyajin12300 的回复:

Quote: 引用 1 楼 caozhy 的回复:

db.DeleteObjects(context.Products.Where(p => ids.Contains(p.ID)));

已解决。p点不出ID。是个泛型。
用下面这种方法解决的。
string val=p.GetType().GetProperty(属性字段名).GetValue(p, null).ToString()


这样不可以吧。只能在Linq To Objects运行

你应该构造表达式树

参考
http://bbs.csdn.net/topics/390534518



这么写的。删除正常了。

public virtual int DelEntities(params int[] ids)
        {
            foreach (var item in ids)
            {
                
                T entitie = new T();
                entitie.GetType().GetProperty("id").SetValue(entitie, item, null);
                //entitie.ID = item;
                db.ObjectStateManager.ChangeObjectState(entitie, System.Data.EntityState.Deleted);
               
            }
            return ids.Count();
        }
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,