* src/**/*: Flush; syncs to DbLinq r1053. Adds
[mono.git] / mcs / class / System.Data.Linq / src / DbLinq / Data / Linq / EntitySet.cs
index 18d36d3e8f7c898fe97d2743e6cdae5ebda25c42..45a2ffa6f092cd996dd7557d67a868aa6f982ae3 100644 (file)
@@ -125,6 +125,9 @@ namespace DbLinq.Data.Linq
                 return;\r
             sourceAsList.Add(entity);\r
             OnAdd(entity);\r
+            ListChangedEventHandler handler = ListChanged;\r
+            if (handler != null)\r
+                handler(this, new ListChangedEventArgs(ListChangedType.ItemAdded, sourceAsList.Count - 1));\r
         }\r
 \r
         [DbLinqToDo]\r
@@ -161,6 +164,9 @@ namespace DbLinq.Data.Linq
                 throw new ArgumentOutOfRangeException();\r
             OnAdd(entity);\r
             sourceAsList.Insert(index, entity);\r
+            ListChangedEventHandler handler = ListChanged;\r
+            if (handler != null)\r
+                handler(this, new ListChangedEventArgs(ListChangedType.ItemAdded, index));\r
         }\r
 \r
         /// <summary>\r
@@ -171,6 +177,9 @@ namespace DbLinq.Data.Linq
         {\r
             OnRemove(sourceAsList[index]);\r
             sourceAsList.RemoveAt(index);\r
+            ListChangedEventHandler handler = ListChanged;\r
+            if (handler != null)\r
+                handler(this, new ListChangedEventArgs(ListChangedType.ItemDeleted, index));\r
         }\r
 \r
         /// <summary>\r
@@ -181,7 +190,9 @@ namespace DbLinq.Data.Linq
         {\r
             get\r
             {\r
-                return Source.ElementAt(index);\r
+                if(! this.HasLoadedOrAssignedValues)\r
+                    return Source.ElementAt(index);\r
+                return sourceAsList[index];\r
             }\r
             set\r
             {\r
@@ -195,14 +206,21 @@ namespace DbLinq.Data.Linq
 \r
         #region ICollection<TEntity> Members\r
 \r
+        private void clear()\r
+        {\r
+            sourceAsList.Clear();\r
+            Source = Enumerable.Empty<TEntity>();\r
+        }\r
+\r
         /// <summary>\r
         /// Removes all items in collection\r
         /// </summary>\r
         public void Clear()\r
         {\r
-            while (sourceAsList.Count > 0)\r
-                Remove(sourceAsList [0]);\r
-            Source = Enumerable.Empty<TEntity>();\r
+            clear();\r
+            ListChangedEventHandler handler = ListChanged;\r
+            if (handler != null)\r
+                handler(this, new ListChangedEventArgs(ListChangedType.Reset, -1));\r
         }\r
 \r
         /// <summary>\r
@@ -212,9 +230,10 @@ namespace DbLinq.Data.Linq
         /// <returns>\r
         ///    <c>true</c> if [contains] [the specified entity]; otherwise, <c>false</c>.\r
         /// </returns>\r
+        [DbLinqToDo]\r
         public bool Contains(TEntity entity)\r
         {\r
-            return Source.Contains(entity);\r
+            return sourceAsList.Contains(entity);\r
         }\r
 \r
         /// <summary>\r
@@ -234,6 +253,8 @@ namespace DbLinq.Data.Linq
         {\r
             get\r
             {\r
+                if (!this.HasLoadedOrAssignedValues)\r
+                    return Source.Count();\r
                 return sourceAsList.Count;\r
             }\r
         }\r
@@ -257,6 +278,10 @@ namespace DbLinq.Data.Linq
         public bool Remove(TEntity entity)\r
         {\r
             OnRemove(entity);\r
+            ListChangedEventHandler handler = ListChanged;\r
+            int i = sourceAsList.IndexOf(entity);\r
+            if (handler != null)\r
+                handler(this, new ListChangedEventArgs(ListChangedType.ItemDeleted, i));\r
             return sourceAsList.Remove(entity);\r
         }\r
 \r
@@ -369,7 +394,7 @@ namespace DbLinq.Data.Linq
         /// </value>\r
         public bool IsDeferred\r
         {\r
-            get { return Source is IQueryable; }\r
+            get { return SourceInUse == null && Source is IQueryable; }\r
         }\r
 \r
         /// <summary>\r
@@ -394,11 +419,16 @@ namespace DbLinq.Data.Linq
         public void Assign(IEnumerable<TEntity> entitySource)\r
         {\r
             // notifies removals and adds\r
-            Clear();\r
+            clear();\r
             foreach (var entity in entitySource)\r
+            {\r
                 OnAdd(entity);\r
+            }\r
             this.Source = entitySource;\r
             this.SourceInUse = sourceAsList;\r
+            ListChangedEventHandler handler = ListChanged;\r
+            if (handler != null)\r
+                handler(this, new ListChangedEventArgs(ListChangedType.Reset,-1));\r
         }\r
 \r
         /// <summary>\r
@@ -417,7 +447,7 @@ namespace DbLinq.Data.Linq
         /// </summary>\r
         public void Load()\r
         {\r
-            this.sourceAsList.Count();\r
+            IList<TEntity> list = this.sourceAsList;\r
         }\r
 \r
         /// <summary>\r