// ========================================================================
// Copyright 2006 - Volian Enterprises, Inc. All rights reserved.          
// Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
// ------------------------------------------------------------------------
// $Workfile: $     $Revision: $                                           
// $Author: $   $Date: $                                                   
//                                                                         
// $History: $                                                             
// ========================================================================
using System;
using System.Data;
using System.Data.SqlClient;
using Csla;
using Csla.Data;
namespace Volian.Object.Library
{
	/// 
	///	RoleAssignments Generated by MyGeneration using the CSLA Object Mapping template
	/// 
	[Serializable()]
	public partial class RoleAssignments : BusinessListBase
	{
    #region Business Methods
    public RoleAssignment this[int folderid, int gid]
    {
      get
      {
        foreach (RoleAssignment assignment in this)
          if (assignment.Folderid == folderid && assignment.Gid == gid)
            return assignment;
        return null;
      }
    }
    public RoleAssignment GetItem(int folderid, int gid)
    {
      foreach (RoleAssignment assignment in this)
        if (assignment.Folderid == folderid && assignment.Gid == gid)
          return assignment;
      return null;
    }
    public void Add(int gid, int folderid)
    {
      if (!Contains(folderid, gid))
      {
        RoleAssignment assignment =
          RoleAssignment.New(gid, folderid);
        this.Add(assignment);
      }
      else
        throw new InvalidOperationException("assignment already exists");
    }
    public void Remove(int folderid, int gid)
    {
      foreach (RoleAssignment assignment in this)
      {
        if (assignment.Folderid == folderid && assignment.Gid == gid)
        {
          Remove(assignment);
          break;
        }
      }
    }
    public bool Contains(int folderid, int gid)
    {
      foreach (RoleAssignment assignment in this)
        if (assignment.Folderid == folderid && assignment.Gid == gid)
          return true;
      return false;
    }
    public bool ContainsDeleted(int folderid, int gid)
    {
      foreach (RoleAssignment assignment in DeletedList)
        if (assignment.Folderid == folderid && assignment.Gid == gid)
          return true;
      return false;
    }
    #endregion
	#region Factory Methods
    internal static RoleAssignments New()
    {
      return new RoleAssignments();
    }
    internal static RoleAssignments Get(SafeDataReader dr)
    {
      return new RoleAssignments(dr);
    }
    private RoleAssignments()
    {
      MarkAsChild();
    }
    private RoleAssignments(SafeDataReader dr)
    {
      MarkAsChild();
      Fetch(dr);
    }
	#endregion
	#region Data Access Portal
	
    // called to load data from the database
    private void Fetch(SafeDataReader dr)
    {
      this.RaiseListChangedEvents = false;
      while (dr.Read())
        this.Add(RoleAssignment.Get(dr));
      this.RaiseListChangedEvents = true;
    }
    internal void Update(Role role,SqlConnection cn)
    {
      this.RaiseListChangedEvents = false;
      // update (thus deleting) any deleted child objects
      foreach (RoleAssignment obj in DeletedList)
        obj.DeleteSelf(role,cn);
      // now that they are deleted, remove them from memory too
      DeletedList.Clear();
      // add/update any current child objects
      foreach (RoleAssignment obj in this)
      {
        if (obj.IsNew)
          obj.Insert(role,cn);
        else
          obj.Update(role,cn);
      }
      this.RaiseListChangedEvents = true;
    }
    #endregion
	} // Class
} // Namespace