none
实体框架下,如何用一个简单函数实现不同实体的增删改? RRS feed

  • 问题


  • 0. i created a model from Oracle, and successfully DML (insert, update, delete) data with EF;
    1. however, for each entity of this model, i have to write a special function to DML it (so if i have 10 entities, i have to write a similar code for 10 times), like

    static DmlEntityA{
          void Insert(entityA);
          void Update(entiyA);
          void Delete(entityA);
    }
    
    static DmlEntityB{
          void Insert(entityB);
          void Update(entiyB);
          void Delete(entityB);
    }
    
    static DmlEntityC{
          void Insert(entityC);
          void Update(entiyC);
          void Delete(entityC);
    }
    
    // ...
    



    a more specific code was attached below.

    2. is there any generic way to do such things?

    thx.


          
      private static bool PreserveChanges(MyModel.Clinic.MedRoute entity, DML dmlType)
            {
                using (var tx = new TransactionScope())
                {
                    try
                    {
                        using (var ctx = new MyModel.Clinic.ClinicEntities())
                        {
                            switch (dml)
                            {
                                case DML.Insert:
                                    ctx.AddToClinicObjects(entity);
                                    break;
                                case DML.Update:                              
                                    if (null != entity)
                                    {
                                        ctx.AttachTo("ClinicObjects", entity);
                                        ctx.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);
                                    }
                                    break;
                                case DML.Delete:
                                    var oj2 = ctx.ClinicObjects.Where(x => x.Id == entity.Id).FirstOrDefault();
                                    if (null != oj2)
                                    {
                                        ctx.DeleteObject(oj2);
                                    }
                                    break;
                                default:
                                    break;
                            }
    
                            ctx.SaveChanges();
                        }
                        
    
                        tx.Complete();
                        return true;
                    }
                    catch (System.Data.UpdateException ex)
                    {
                       // write error to log file
                        LogException(ex);
                        return false;
                    }
                }
            }
    


    Debug my heart...
    2010年11月30日 8:10