i have decided implement genericrepository. realize there "best practices" , many many ways of doing this. know ioc container recommended , unit of work.
however, instead of getting told "you doing wrong"
- i want make sure code not causing unnecessary open connections
- i wish have handle on open /close of dbcontext
my genericrepository might tightly coupled dbcontext, not sure. using reverse poco generator, added in generic repository.
here 4 ways code "works"
1. new up
this news genericrepository, unless i'm worked model entity of "academiclevel" , seems in homecontroller not idea, right?
var repository = new genericrepository<academiclevel>(); list<academiclevel> academic = repository.selectall().tolist();
2. using statement
using (var gr = new genericrepository<academiclevel>()) { list<academiclevel> academic = gr.selectall().tolist(); }
3. new dbcontext implementation using
using (var db = new interntrackingdbcontext()) { var repository = new genericrepository<academiclevel>(); list<academiclevel> academic = repository.selectall().tolist(); }
4. using newing direct context calls
using (var db = new interntrackingdbcontext()) { var data = db.skills; foreach (var item in data) { // console app testing console.writeline(item.skillname + " , id = " + item.skillid); } }
so above, i'm sure critical thing show genericrepository
public class genericrepository<t> : igenericrepository<t>, idisposable t : class { private readonly interntrackingdbcontext db; private dbset<t> table = null; public genericrepository() { this.db = new interntrackingdbcontext(); table = db.set<t>(); } public genericrepository(interntrackingdbcontext db) { this.db = db; table = db.set<t>(); } public ienumerable<t> selectall() { return table.tolist(); } public t selectbyid(object id) { return table.find(id); } public void insert(t obj) { table.add(obj); } public void update(t obj) { table.attach(obj); db.entry(obj).state = entitystate.modified; } public void delete(object id) { t existing = table.find(id); table.remove(existing); } public void save() { db.savechanges(); } protected virtual void dispose(bool disposing) { if (disposing) { if (db != null) { db.dispose(); } } } public void dispose() { dispose(true); gc.suppressfinalize(this); } }
i not wish over-complicate this, make sure 1. approaching decently 2. calling crud methods best way possible 3. not keep dbcontext or connections open
ideally would want have homecontroller in said private @ top of page, i'm getting confused on interntrackingdbcontext , genericrepository far newing them up. see better way, code mods see can implemented?
Comments
Post a Comment