Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 通用删除不起作用?_C# 4.0_Entity Framework 4.1 - Fatal编程技术网

C# 4.0 通用删除不起作用?

C# 4.0 通用删除不起作用?,c#-4.0,entity-framework-4.1,C# 4.0,Entity Framework 4.1,我有一个带有Delete方法的抽象存储库类: public abstract class MyRepository<C, T> : IMyRepository<T> where T : class where C : ObjectContext, new() { private C _entities = new C(); public C Context {

我有一个带有Delete方法的抽象存储库类:

   public abstract class MyRepository<C, T> :
        IMyRepository<T>
        where T : class
        where C : ObjectContext, new()
    {
        private C _entities = new C();

        public C Context
        {
            get { return _entities; }
            set { _entities = value; }
        }

        public virtual void Delete(T entity)
        {
            _entities.Attach(entity);
            _entities.DeleteObject(entity);
            _entities.SaveChanges();
        }
    }
公共抽象类MyRepository:
不记忆的
T:在哪里上课
其中C:ObjectContext,new()
{
私有C_实体=新C();
公共C上下文
{
获取{return\u entities;}
设置{u entities=value;}
}
公共虚拟作废删除(T实体)
{
_实体。附(实体);
_实体。删除对象(实体);
_entities.SaveChanges();
}
}
但是这不编译吗?如何在此处创建通用删除方法?

而不是此方法

private C _entities = new C();
使用Activator.CreateInstance:

private C_entities=Activator.CreateInstance();

修改
删除方法,如下所示

    public virtual void Delete(T entity)
    {
        _entities.CreateObjectSet<T>().Attach(entity);
        _entities.DeleteObject(entity);
        _entities.SaveChanges();
    }

    public virtual void Update(T entity)
    {
        _entities.CreateObjectSet<T>().Attach(entity);
        _entities.ObjectStateManager
            .ChangeObjectState(entity, System.Data.EntityState.Modified); 
        _entities.SaveChanges();
    }
公共虚拟作废删除(T实体)
{
_entities.CreateObjectSet().Attach(实体);
_实体。删除对象(实体);
_entities.SaveChanges();
}
公共虚拟无效更新(T实体)
{
_entities.CreateObjectSet().Attach(实体);
_entities.ObjectStateManager
.ChangeObjectState(实体、系统、数据、实体状态、修改);
_entities.SaveChanges();
}

可能
where T:object
而不是
where T:class
?与“System.Data.Objects.ObjectContext.Attach(System.Data.Objects.DataClasses.IEntityWithKey)”匹配的最佳重载方法具有一些无效参数:参数1:无法从“T”转换为“System.Data.Objects.DataClasses.IEntityWithKey”,
其中T:IEntityWithKey
那么,类似这样的内容:_entities.CreateObjectSet().Attach(entity)_entities.ObjectStateManager.ChangeObjectState(entity、System.Data.EntityState.Modified)_entities.SaveChanges();
    public virtual void Delete(T entity)
    {
        _entities.CreateObjectSet<T>().Attach(entity);
        _entities.DeleteObject(entity);
        _entities.SaveChanges();
    }

    public virtual void Update(T entity)
    {
        _entities.CreateObjectSet<T>().Attach(entity);
        _entities.ObjectStateManager
            .ChangeObjectState(entity, System.Data.EntityState.Modified); 
        _entities.SaveChanges();
    }