entity-framework – 实体框架 – 删除Oracle 10g中的实体{由于
我尝试在Oracle 10g上的Entity Framework中使用Repository模式.我简化了我的代码:
这是SQL代码: -- Create table create table TESTTABLE ( MODULE_UNIQUE_ID VARCHAR2(32) not null,PANEL_STATUS VARCHAR2(8) not null ) tablespace SYSTEM pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Create/Recreate primary,unique and foreign key constraints alter table TESTTABLE add constraint TESTTABLE_PK_01 unique (MODULE_UNIQUE_ID) using index tablespace SYSTEM pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); 我创建了简单的存储库类: public interface IRepository<TEntity,TCtx> { TCtx Session { get;} void Add(TEntity entity); void AddOrAttach(TEntity entity); void Delete(TEntity entity); int Save(); TEntity SelectByKey(string colName,string key); } public class Repository<TEntity,TCtx> : IRepository<TEntity,TCtx>,IDisposable where TEntity : EntityObject where TCtx : ObjectContext { #region Private fields private TCtx _ctx; private string _keyProperty = "ID"; public int Save() { return _ctx.SaveChanges(); } public TEntity SelectByKey(string colName,string key) { KeyProperty = colName; // First we define the parameter that we are going to use the clause. var xParam = Expression.Parameter(typeof(TEntity),typeof(TEntity).Name); MemberExpression leftExpr = Expression.Property(xParam,KeyProperty); Expression rightExpr = Expression.Constant(key); BinaryExpression binaryExpr = Expression.Equal(leftExpr,rightExpr); //Create Lambda Expression for the selection Expression<Func<TEntity,bool>> lambdaExpr = Expression.Lambda<Func<TEntity,bool>> (binaryExpr,new ParameterExpression[] { xParam }); //Searching .... //IList<TEntity> resultCollection = ((IRepository<TEntity,TCtx>)this).SelectAll(new Specification<TEntity>(lambdaExpr)); //if (null != resultCollection && resultCollection.Count() > 0) //{ // //return valid single result // return resultCollection.First(); //} //return null; return ((IRepository<TEntity,TCtx>) this) .SelectAll(new Specification<TEntity>(lambdaExpr)).FirstOrDefault(); } public void Delete(TEntity entity) { _ctx.DeleteObject(entity); } } 问题是我先选择一些实体,然后我要删除. var _repo = new Repository<TESTTABLE,Entities>( new Entities(ConfigurationManager.ConnectionStrings["Entities"] .ConnectionString)); var obj = _repo.SelectByKey("MODULE_UNIQUE_ID","22222"); _repo.Delete(obj); _repo.Save(); 我得到这个例外:
内部异常:
堆栈跟踪:
我再次测试了我的存储库类MS SQL数据库它运行良好. 什么可能导致这个问题? 解决方法我记得看到过这样的事情:_context.ObjectStateManager.ChangeObjectState(entity,EntityState.Modified); >加载/附加实体 MSDN Notes http://msdn.microsoft.com/en-us/library/system.data.objects.objectstatemanager.aspx 相关邮政ObjectContext tracking changes in Entity Framwwork 出于性能原因,您可以加载没有更改跟踪的对象 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |