Exemplo n.º 1
0
        public void CrudOperations()
        {
            var rs = new RecordSet(
                new[] {
                new RecordSet.Column("id", typeof(int)),
                new RecordSet.Column("name", typeof(string)),
                new RecordSet.Column("age", typeof(int))
            }
                );

            // columns collection
            Assert.Equal(3, rs.Columns.Count);
            Assert.Equal(1, rs.Columns.GetOrdinal("name"));
            Assert.Equal("age", rs.Columns[2].Name);
            Assert.Equal("name", rs.Columns["name"].Name);

            Assert.Throws <ArgumentException>(() => {
                rs.Add(new object[2]);
            });
            Assert.Throws <ArgumentException>(() => {
                rs.Add(new object[4]);
            });

            Action <int, string, int> addRow = (id, name, age) => {
                var r = rs.Add();
                r["id"]   = id;
                r["name"] = name;
                r["age"]  = age;
            };

            addRow(1, "John", 25);
            addRow(2, "Mary", 28);
            addRow(3, "Ray", 32);

            Assert.Equal(3, rs.Count);
            Assert.Equal(RecordSet.RowState.Added, rs[0].State & RecordSet.RowState.Added);

            rs.AcceptChanges();
            Assert.Equal(3, rs.Count);
            Assert.Equal(RecordSet.RowState.Unchanged, rs[0].State);

            rs[2].Delete();
            Assert.Equal(RecordSet.RowState.Deleted, rs[2].State);
            rs.AcceptChanges();
            Assert.Equal(2, rs.Count);

            // add values array
            rs.Add(new object[] { 4, "Adam", 45 });
            Assert.Equal(3, rs.Count);

            // add dictionary
            rs.Add(new Dictionary <string, object>()
            {
                { "name", "Gomer" }
            });
            Assert.Equal(4, rs.Count);

            // typed accessor
            Assert.Equal("Gomer", rs[3].Field <string>("name"));
            Assert.Equal(null, rs[3].Field <int?>("age"));
            Assert.Equal(45, rs[2].Field <int?>("age"));

            rs[0]["name"] = "Bart";
            Assert.Equal(RecordSet.RowState.Modified, rs[0].State & RecordSet.RowState.Modified);
            rs[0].AcceptChanges();
            Assert.Equal(RecordSet.RowState.Unchanged, rs[0].State);
            Assert.Equal("Bart", rs[0]["name"]);


            Assert.Throws <ArgumentException>(() => {
                var t = rs[0]["test"];
            });
        }