McKeymayker
McKeymayker

Reputation: 358

How to implement the Delete method in the interface and call it in the Controller MVC4

Hi i want to implement my void Delete method in my DataSource. I've created the Save() method, but struggling with Delete(). I've been searching but still don't know how to do it. Any help.

The interface:

 public  interface IDepartmentDataSource
{
    IQueryable<User> Users { get; }
    IQueryable<Department> Departments { get;}
    IQueryable<Entry> Entries { get; }

    void Delete();
    void Save();

}

DataSource:

  public class DepartmentDb : DbContext, IDepartmentDataSource
{
    public DepartmentDb() : base("DefaultConnection")
    {

    }

    public DbSet<User> Users { get; set; }
    public DbSet<Department> Departments { get; set; }
    public DbSet<Entry> Entries { get; set; }


    void IDepartmentDataSource.Save()
    {
        SaveChanges();  
    }

    void IDepartmentDataSource.Delete()
    {

        // What is the logic here?

    }

    IQueryable<Entry> IDepartmentDataSource.Entries
    {
        get { return Entries; }
    }

    IQueryable<Department> IDepartmentDataSource.Departments
    {
        get { return Departments; }
    }

    IQueryable<User> IDepartmentDataSource.Users
    {
        get { return Users; }
    }
}

Upvotes: 0

Views: 1499

Answers (2)

McKeymayker
McKeymayker

Reputation: 358

I've found a solution. The promblem i had was with repository pattern. Now my code looks like:

public class DepartmentDb : DbContext
{
public DepartmentDb() : base("DefaultConnection")
{

}

public DbSet<User> Users { get; set; }
public DbSet<Department> Departments { get; set; }
public DbSet<Entry> Entries { get; set; }

}

// your repository
public class DepartmentRepository: IDisposable
{
protected bool isDisposed = false;
private DepartmentDb Context { get; set; } 

// read (public)
public IQueryable<user> Users { get { return Context.Users; } }
public IQueryable<department> Departments { get { return Context.Departments; } }
public IQueryable<entry> Entries { get { return Context.Entries; } }

public DepartmentRepository() 
{
     Context = new DepartmentDb();
}

public int Insert(User item)
{ 
    Context.Users.Add(item);
    return Context.SaveChanges();
}

public int Update(User item)
{ 
    Context.Entry<user>(item).State = EntityState.Modified;
    return Context.SaveChanges();
}


public int Delete(User item)
{ 
    Context.Users.Remove(item);
    return Context.SaveChanges();
}

protected virtual void Dispose(bool disposing)
{
if (isDisposed)
    return;

if (disposing)
{
    if (this.Context != null)
    {
        this.Context.Dispose();
        this.Context = null;
    }
}

isDisposed = true;
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}   

}

Upvotes: 1

DaniCE
DaniCE

Reputation: 2421

I think you need something like:

public void IDepartmentDataSource.DeleteDepartment(int id)
{

   Department itemToDelete = this.GetDepartmentById(id);
   if (itemToDelete != null)
   {
     this.Departments.Remove(itemToDelete);                
   }

 }

(see here for the GetDepartmentById method...)

Upvotes: 1

Related Questions