c# - context.SaveChanges() not updating data in database -


my applictiondbcontextclass looks :-

public class applicationdbcontext : identitydbcontext<applicationuser> {     //private static applicationdbcontext _context;     public applicationdbcontext()         : base("defaultconnection", throwifv1schema: false)     {     }      public static applicationdbcontext create()     {         return new applicationdbcontext();     }      public dbset<trip> trips { get; set; }     public dbset<place> places { get; set; }     public dbset<usertripdetail> usertripdetails { get; set; }     public dbset<trippicture> trippictures { get; set; } } 

my trippicturecontroller looks this:-

    //private readonly applicationdbcontext _db = new applicationdbcontext();     private readonly iunitofwork _unitofwork;     private readonly itrippicturerepository _trippicturerepository;      public trippicturescontroller(iunitofwork unitofwork, itrippicturerepository trippicturerepository)     {         _unitofwork = unitofwork;         _trippicturerepository = trippicturerepository;     } 

it contains post action:-

    [httppost]     public actionresult create(trippicture model, httppostedfilebase imagedata)     {         if (imagedata != null)         {             model.tripid = 1;             model.image = this.converttobytes(imagedata);         }         _trippicturerepository.add(model);         _unitofwork.commit();         //_db.trippictures.add(model);         //_db.savechanges();         return view(model);     } 

when ever hit post request, model not pushed database. using dependency injection here. guess somewhere there creation of different context object. saw following code in startup class :-

    public void configureauth(iappbuilder app)     {         // configure db context, user manager , signin manager use single instance per request         app.createperowincontext(**applicationdbcontext.create**);         app.createperowincontext<applicationusermanager>(applicationusermanager.create);         app.createperowincontext<applicationsigninmanager>(applicationsigninmanager.create);} 

my unitofwork class is:-

public class unitofwork : iunitofwork {     private dbcontext _context;     public unitofwork(dbcontext dbcontext)     {         _context = dbcontext;     }     public void commit()     {         _context.savechanges();     } } 

and repository class :-

public class repository<t> : irepository<t> t : class {     protected dbset<t> _dbset;      public repository(dbcontext context)     {         _dbset = context.set<t>();     }      public void add(t entity)     {         _dbset.add(entity);     } } 

the object saved when don't use unitofwork. problem!?

you implementing unit of work pattern incorrectly.

you adding item _trippicturerepository instance dbcontext , calling _unitofwork.commit() on _unitofwork instance has dbcontext instance has no idea added item (item isn't tracked _unitofwork's dbcontext) means saves nothing.

the correct implementation of unit of work repositories should exposed properties, dbcontext injected unit of work class , dbset<t> of repository populated dbcontext this:

public class unitofwork : iunitofwork {     private dbcontext _context;      public itrippicturerepository tripsrepository{ get; }      public unitofwork(dbcontext dbcontext)     {         _context = dbcontext;         trips = new repository<trip>(_context.trips)     }      public void commit()     {         _context.savechanges();     } } 

then in controller inject iunitofwork instance:

private readonly iunitofwork _unitofwork;  public trippicturescontroller(iunitofwork unitofwork) {     _unitofwork = unitofwork;     _trippicturerepository = trippicturerepository; } 

and use _unitofwork instance crud operations:

[httppost] public actionresult create(trippicture model, httppostedfilebase imagedata) {     if (imagedata != null)     {         model.tripid = 1;         model.image = this.converttobytes(imagedata);     }      _unitofwork.tripsrepository.add(model);     _unitofwork.commit();      return view(model); } 

you can read more repository , unit of work patter microsoft docs page.


Comments

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -