本文整理汇总了C#中RhetosTestContainer.Resolve方法的典型用法代码示例。如果您正苦于以下问题:C# RhetosTestContainer.Resolve方法的具体用法?C# RhetosTestContainer.Resolve怎么用?C# RhetosTestContainer.Resolve使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RhetosTestContainer
的用法示例。
在下文中一共展示了RhetosTestContainer.Resolve方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SqlObject
public void SqlObject()
{
using (var container = new RhetosTestContainer())
{
container.Resolve<ISqlExecuter>().ExecuteSql(new[]
{
"DELETE FROM TestSqlWorkarounds.E",
"INSERT INTO TestSqlWorkarounds.E (I) VALUES (100)"
});
string report = "";
container.Resolve<ISqlExecuter>().ExecuteReader(
@"SELECT E.I, V1.I1, V2.I2
FROM TestSqlWorkarounds.E
INNER JOIN TestSqlWorkarounds.V1 ON V1.ID = E.ID
INNER JOIN TestSqlWorkarounds.V2 ON V2.ID = E.ID",
reader => report += reader.GetInt32(0) + ", " + reader.GetInt32(1) + ", " + reader.GetInt32(2) + ".");
Assert.AreEqual("100, 101, 102.", report);
report = "";
container.Resolve<ISqlExecuter>().ExecuteReader(
@"SELECT X FROM TestSqlWorkarounds.V3 ORDER BY X",
reader => report += reader.GetInt32(0) + ".");
Assert.AreEqual("101.102.", report);
}
}
示例2: ComputeForNewBaseItems
public void ComputeForNewBaseItems()
{
using (var container = new RhetosTestContainer())
{
var repository = container.Resolve<Common.DomRepository>();
var d1ID = Guid.NewGuid();
container.Resolve<ISqlExecuter>().ExecuteSql(new[]
{
"DELETE FROM Test9.Document;",
"DELETE FROM Test9.DocumentCreationInfo;",
"INSERT INTO Test9.Document (ID, Name) SELECT '" + d1ID + "', 'd1'"
});
Assert.AreEqual("", ReportDocumentCreationInfo(repository), "initial");
repository.Test9.DocumentCreationInfo.Recompute();
Assert.AreEqual("d1:1", ReportDocumentCreationInfo(repository), "initial recalc");
var documents = repository.Test9.Document;
var d2ID = Guid.NewGuid();
documents.Insert(new[] { new Test9.Document { ID = d2ID, Name = "d2" } });
Assert.AreEqual("d1:1, d2:2", ReportDocumentCreationInfo(repository), "autorecompute after new");
var d3ID = Guid.NewGuid();
var d4ID = Guid.NewGuid();
documents.Insert(new[] { new Test9.Document { ID = d3ID, Name = "d3" }, new Test9.Document { ID = d4ID, Name = "d4" } });
Assert.AreEqual("d1:1, d2:2, d3:4, d4:4", ReportDocumentCreationInfo(repository), "autorecompute after new2");
documents.Save(null, new[] { new Test9.Document { ID = d1ID, Name = "d1x" } }, new[] { new Test9.Document { ID = d3ID } });
Assert.AreEqual("d1x:1, d2:2, d4:4", ReportDocumentCreationInfo(repository), "autorecompute after update&delete");
}
}
示例3: UpdateLockedDataReference
public void UpdateLockedDataReference()
{
using (var container = new RhetosTestContainer())
{
container.Resolve<ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestLockItems.Simple;" });
var repository = container.Resolve<Common.DomRepository>();
Guid[] guids = new Guid[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() };
var s1 = new TestLockItems.Simple { ID = guids[0], Name = "s1", Count = -1 };
var s2 = new TestLockItems.Simple { ID = guids[1], Name = "s2", Count = 1 };
var t1 = new TestLockItems.Simple2 { ID = guids[2], Name = "t1", TestReference = s1, Count = -1 };
var t2 = new TestLockItems.Simple2 { ID = guids[3], Name = "t2", TestReference = s1, Count = 1 };
repository.TestLockItems.Simple.Insert(new[] { s1, s2 });
AssertData("s1, s2", repository);
repository.TestLockItems.Simple2.Insert(new[] { t1, t2 });
AssertDataSimple2("t1, t2", repository);
foreach (var e in new[] { t1, t2 })
e.TestReference = s1;
repository.TestLockItems.Simple2.Update(new[] { t1 });
AssertDataSimple2("t1, t2", repository);
foreach (var e in new[] { t1, t2 })
e.TestReference = s2;
TestUtility.ShouldFail(() => repository.TestLockItems.Simple2.Update(new[] { t1 }), "TestReference is locked if count negative.");
TestUtility.ShouldFail(() => repository.TestLockItems.Simple2.Update(new[] { t2, t1 }), "TestReference is locked if count negative.");
TestUtility.ShouldFail(() => repository.TestLockItems.Simple2.Update(new[] { t1, t2 }), "TestReference is locked if count negative.");
AssertDataSimple2("t1, t2", repository);
repository.TestLockItems.Simple2.Update(new[] { t2 });
AssertDataSimple2("t1, t2", repository);
}
}
示例4: UpdateLockedData
public void UpdateLockedData()
{
using (var container = new RhetosTestContainer())
{
container.Resolve<ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestLockItems.Simple;" });
var repository = container.Resolve<Common.DomRepository>();
var s1 = new TestLockItems.Simple { ID = Guid.NewGuid(), Name = "s1" };
var s2 = new TestLockItems.Simple { ID = Guid.NewGuid(), Name = "s2" };
var s3Lock = new TestLockItems.Simple { ID = Guid.NewGuid(), Name = "s3_lock" };
var s4 = new TestLockItems.Simple { ID = Guid.NewGuid(), Name = "s4" };
repository.TestLockItems.Simple.Insert(new[] { s1, s2, s3Lock, s4 });
AssertData("s1, s2, s3_lock, s4", repository);
foreach (var e in new[] {s1, s2, s3Lock, s4})
e.Name = e.Name + "x";
AssertData("s1, s2, s3_lock, s4", repository);
TestUtility.ShouldFail(() => repository.TestLockItems.Simple.Update(new[] { s3Lock }), "Name contains lock mark.");
TestUtility.ShouldFail(() => repository.TestLockItems.Simple.Update(new[] { s1, s3Lock }), "Name contains lock mark.");
TestUtility.ShouldFail(() => repository.TestLockItems.Simple.Update(new[] { s3Lock, s4 }), "Name contains lock mark.");
AssertData("s1, s2, s3_lock, s4", repository);
repository.TestLockItems.Simple.Update(new[] { s1 });
AssertData("s1x, s2, s3_lock, s4", repository);
}
}
示例5: LazyLoadReferenceBaseExtensionLinkedItems
public void LazyLoadReferenceBaseExtensionLinkedItems()
{
using (var container = new RhetosTestContainer())
{
var repository = container.Resolve<Common.DomRepository>();
repository.TestLazyLoad.Simple.Delete(repository.TestLazyLoad.Simple.Load());
repository.TestLazyLoad.SimpleBase.Delete(repository.TestLazyLoad.SimpleBase.Load());
repository.TestLazyLoad.Parent.Delete(repository.TestLazyLoad.Parent.Load());
var p1 = new TestLazyLoad.Parent { ID = Guid.NewGuid(), Name = "p1" };
repository.TestLazyLoad.Parent.Insert(p1);
var sb1 = new TestLazyLoad.SimpleBase { ID = Guid.NewGuid(), Name = "sb1" };
var sb2 = new TestLazyLoad.SimpleBase { ID = Guid.NewGuid(), Name = "sb2" };
repository.TestLazyLoad.SimpleBase.Insert(sb1, sb2);
var s1 = new TestLazyLoad.Simple { ID = sb1.ID, ParentID = p1.ID };
var s2 = new TestLazyLoad.Simple { ID = sb2.ID, ParentID = p1.ID };
repository.TestLazyLoad.Simple.Insert(s1, s2);
container.Resolve<IPersistenceCache>().ClearCache();
var loadedSimple = repository.TestLazyLoad.Simple.Query().ToList();
Assert.AreEqual("p1/sb1, p1/sb2", TestUtility.DumpSorted(loadedSimple, item => item.Parent.Name + "/" + item.Base.Name));
container.Resolve<IPersistenceCache>().ClearCache();
var loadedBase = repository.TestLazyLoad.SimpleBase.Query().ToList();
Assert.AreEqual("p1/sb1, p1/sb2", TestUtility.DumpSorted(loadedBase, item => item.Extension_Simple.Parent.Name + "/" + item.Name));
container.Resolve<IPersistenceCache>().ClearCache();
var loadedParent = repository.TestLazyLoad.Parent.Query().ToList().Single();
Assert.AreEqual("p1/sb1, p1/sb2", TestUtility.DumpSorted(loadedParent.Children, item => item.Parent.Name + "/" + item.Base.Name));
}
}
示例6: DeleteModifiedPersistentObject
public void DeleteModifiedPersistentObject()
{
using (var container = new RhetosTestContainer())
{
container.Resolve<ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestLockItems.Simple;" });
var repository = container.Resolve<Common.DomRepository>();
{
var s3Lock = new TestLockItems.Simple { ID = Guid.NewGuid(), Name = "s3_lock" };
repository.TestLockItems.Simple.Insert(new[] { s3Lock });
AssertData("s3_lock", repository);
container.Resolve<Common.ExecutionContext>().NHibernateSession.Clear();
AssertData("s3_lock", repository);
}
{
var s3Persistent = repository.TestLockItems.Simple.All().Single();
s3Persistent.Name = "abc";
TestUtility.ShouldFail(() => repository.TestLockItems.Simple.Delete(new[] { s3Persistent }),
"Name contains lock mark");
AssertData("s3_lock", repository);
container.Resolve<Common.ExecutionContext>().NHibernateSession.Clear();
AssertData("s3_lock", repository);
}
}
}
示例7: NullReference
public void NullReference()
{
using (var container = new RhetosTestContainer())
{
var repository = container.Resolve<Common.DomRepository>();
Guid refID = Guid.NewGuid();
container.Resolve<ISqlExecuter>().ExecuteSql(new[]
{
"DELETE FROM TestBrowse.Source;",
"DELETE FROM TestBrowse.Other;",
"INSERT INTO TestBrowse.Other (ID, Name) SELECT '" + refID + "', 'abc';",
"INSERT INTO TestBrowse.Source (RefID) SELECT NULL;"
});
Assert.IsNull(repository.TestBrowse.Source.Query().ToArray().Select(item => item.Ref != null ? item.Ref.Name : null).Single(), "separated loading with null checking");
Assert.IsNull(repository.TestBrowse.Source.Query().Select(item => item.Ref != null ? item.Ref.Name : null).Single(), "all in one query with null checking");
Assert.IsNull(repository.TestBrowse.Source.Query().Select(item => item.Ref.Name).Single(), "all in one query");
// TODO: "'Separated loading' fails because LINQ2NH will handle nullable properies and null values differently than a simple LINQ query over materialized instances (Linq2Objects). Try to implement browse in a such way that it behaves the same in both scenarios without degrading performance (maybe generating SqlView).
Assert.IsNull(repository.TestBrowse.Source.Query().ToArray().Select(item => item.Ref.Name).Single(), "separated loading");
}
}
示例8: CascadeDelete
public void CascadeDelete()
{
using (var container = new RhetosTestContainer())
{
var repository = container.Resolve<Common.DomRepository>();
var pid1 = Guid.NewGuid();
var pid2 = Guid.NewGuid();
var pid3 = Guid.NewGuid();
var cid11 = Guid.NewGuid();
var cid12 = Guid.NewGuid();
var cid21 = Guid.NewGuid();
var cid31 = Guid.NewGuid();
container.Resolve<ISqlExecuter>().ExecuteSql(new[]
{
"DELETE FROM TestEntity.Child",
"DELETE FROM TestEntity.BaseEntity",
"INSERT INTO TestEntity.BaseEntity (ID, Name) SELECT '" + pid1 + "', '1'",
"INSERT INTO TestEntity.BaseEntity (ID, Name) SELECT '" + pid2+ "', '2'",
"INSERT INTO TestEntity.BaseEntity (ID, Name) SELECT '" + pid3 + "', '3'",
"INSERT INTO TestEntity.Child (ID, Name, ParentID) SELECT '" + cid11 + "', '11', '" + pid1 + "'",
"INSERT INTO TestEntity.Child (ID, Name, ParentID) SELECT '" + cid12 + "', '12', '" + pid1 + "'",
"INSERT INTO TestEntity.Child (ID, Name, ParentID) SELECT '" + cid21 + "', '21', '" + pid2 + "'",
"INSERT INTO TestEntity.Child (ID, Name, ParentID) SELECT '" + cid31 + "', '31', '" + pid3 + "'",
});
Assert.AreEqual("11, 12, 21, 31", TestUtility.DumpSorted(repository.TestEntity.Child.All(), item => item.Name));
repository.TestEntity.BaseEntity.Delete(new [] { new TestEntity.BaseEntity { ID = pid1 }, new TestEntity.BaseEntity { ID = pid2 } });
Assert.AreEqual("31", TestUtility.DumpSorted(repository.TestEntity.Child.All(), item => item.Name));
}
}
示例9: QueryComplex
public void QueryComplex()
{
using (var container = new RhetosTestContainer())
{
var repository = container.Resolve<Common.DomRepository>();
container.Resolve<ISqlExecuter>().ExecuteSql(new[]
{
"DELETE FROM TestEntity.Permission",
"DELETE FROM TestEntity.Principal",
"DELETE FROM TestEntity.Claim",
"INSERT INTO TestEntity.Claim (ID, ClaimResource, ClaimRight) SELECT '4074B807-FA5A-4772-9631-198E89A302DE', 'res1', 'rig1'",
"INSERT INTO TestEntity.Claim (ID, ClaimResource, ClaimRight) SELECT 'A45F7194-7288-4B25-BC77-4FCC920A1479', 'res2', 'rig2'",
"INSERT INTO TestEntity.Principal (ID, Name) SELECT 'A45F7194-7288-4B25-BC77-4FCC920A1479', 'p1'",
"INSERT INTO TestEntity.Permission (ID, PrincipalID, ClaimID, IsAuthorized) SELECT '65D4B68E-B0E7-491C-9405-800F531866CA', 'A45F7194-7288-4B25-BC77-4FCC920A1479', '4074B807-FA5A-4772-9631-198E89A302DE', 0",
"INSERT INTO TestEntity.Permission (ID, PrincipalID, ClaimID, IsAuthorized) SELECT 'B7F19BA7-C70F-46ED-BFC7-29A44DFECA9B', 'A45F7194-7288-4B25-BC77-4FCC920A1479', 'A45F7194-7288-4B25-BC77-4FCC920A1479', 1"
});
var q1 = repository.TestEntity.Principal.Query();
var q2 = repository.TestEntity.Permission.Query();
var loaded =
from principal in q1
from permission in q2
where principal.Name == "p1" && permission.Principal == principal && permission.IsAuthorized.Value
select permission.Claim.ClaimResource + "." + permission.Claim.ClaimRight;
Assert.AreEqual("res2.rig2", loaded.Single());
}
}
示例10: UpdateLockedData
public void UpdateLockedData()
{
using (var container = new RhetosTestContainer())
{
container.Resolve<ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestLockItems.Simple;" });
var repository = container.Resolve<Common.DomRepository>();
var s1 = new TestLockItems.Simple { ID = Guid.NewGuid(), Name = "s1", Count = -1 };
var s2 = new TestLockItems.Simple { ID = Guid.NewGuid(), Name = "s2", Count = 1 };
repository.TestLockItems.Simple.Insert(new[] { s1, s2 });
AssertData("s1, s2", repository);
foreach (var e in new[] { s1, s2 })
e.Name = e.Name + "x";
AssertData("s1, s2", repository);
TestUtility.ShouldFail(() => repository.TestLockItems.Simple.Update(new[] { s1 }), "Name is locked if count negative.");
TestUtility.ShouldFail(() => repository.TestLockItems.Simple.Update(new[] { s2, s1 }), "Name is locked if count negative.");
TestUtility.ShouldFail(() => repository.TestLockItems.Simple.Update(new[] { s1, s2 }), "Name is locked if count negative.");
AssertData("s1, s2", repository);
repository.TestLockItems.Simple.Update(new[] { s2 });
AssertData("s1, s2x", repository);
}
}
示例11: ActivePropertyValueDoesNotHaveToBeDefinedOnUpdate
public void ActivePropertyValueDoesNotHaveToBeDefinedOnUpdate()
{
using (var container = new RhetosTestContainer())
{
var id1 = Guid.NewGuid();
var id2 = Guid.NewGuid();
var id3 = Guid.NewGuid();
container.Resolve<ISqlExecuter>().ExecuteSql(new[] {
"DELETE FROM TestDeactivatable.BasicEnt",
"INSERT INTO TestDeactivatable.BasicEnt (ID, Name) VALUES (" + SqlUtility.QuoteGuid(id1) + ", 'a')",
"INSERT INTO TestDeactivatable.BasicEnt (ID, Name, Active) VALUES (" + SqlUtility.QuoteGuid(id2) + ", 'b', 0)",
"INSERT INTO TestDeactivatable.BasicEnt (ID, Name) VALUES (" + SqlUtility.QuoteGuid(id3) + ", 'c')"
});
var repository = container.Resolve<Common.DomRepository>();
var e1 = new BasicEnt { ID = id1, Name = "a2", Active = false };
var e2 = new BasicEnt { ID = id2, Name = "b2" };
var e3 = new BasicEnt { ID = id3, Name = "c2" };
repository.TestDeactivatable.BasicEnt.Update(new[] { e1, e2, e3});
var afterUpdate = repository.TestDeactivatable.BasicEnt.All();
Assert.AreEqual(
"a2 False, b2 False, c2 True",
TestUtility.DumpSorted(afterUpdate, item => item.Name + " " + item.Active));
}
}
示例12: PersistPartial
public void PersistPartial()
{
using (var container = new RhetosTestContainer())
{
container.Resolve<ISqlExecuter>().ExecuteSql(new[] { "DELETE FROM TestComputedFrom.PersistPartial" });
var repository = container.Resolve<Common.DomRepository>();
Assert.AreEqual("", TestUtility.DumpSorted(repository.TestComputedFrom.PersistPartial.All(), Dump));
repository.TestComputedFrom.PersistPartial.RecomputeFromSource(new Rhetos.Dom.DefaultConcepts.FilterAll(), items => items.Where(item => item.Name == "aa"));
container.Resolve<Common.ExecutionContext>().EntityFrameworkContext.ClearCache();
Assert.AreEqual("aa", TestUtility.DumpSorted(repository.TestComputedFrom.PersistPartial.All(), Dump), "recompute all with SaveFilter to sync only Name aa ");
repository.TestComputedFrom.PersistPartial.RecomputeFromSource();
container.Resolve<Common.ExecutionContext>().EntityFrameworkContext.ClearCache();
Assert.AreEqual("aa, bb", TestUtility.DumpSorted(repository.TestComputedFrom.PersistPartial.All(), Dump), "recompute all");
repository.TestComputedFrom.PersistPartial.Delete(repository.TestComputedFrom.PersistPartial.All());
container.Resolve<Common.ExecutionContext>().EntityFrameworkContext.ClearCache();
repository.TestComputedFrom.PersistPartial.RecomputeFromSource(new[] { repository.TestComputedFrom.Source.All().Where(item => item.Name == "bb").Single().ID });
container.Resolve<Common.ExecutionContext>().EntityFrameworkContext.ClearCache();
Assert.AreEqual("bb", TestUtility.DumpSorted(repository.TestComputedFrom.PersistPartial.All(), Dump), "recompute by ID (name bb)");
}
}
示例13: LeavePredefinedUser
public void LeavePredefinedUser()
{
using (var container = new RhetosTestContainer())
{
var genericRepositories = container.Resolve<GenericRepositories>();
var repository = container.Resolve<Common.DomRepository>();
string currentUserName = container.Resolve<IUserInfo>().UserName;
Assert.IsTrue(!string.IsNullOrWhiteSpace(currentUserName));
var currentPrincipal = new Common.Principal { Name = currentUserName };
genericRepositories.InsertOrReadId(currentPrincipal, p => p.Name);
string otherUserName = "otherUser-" + Guid.NewGuid();
var otherPrincipal = new Common.Principal { Name = otherUserName };
genericRepositories.InsertOrReadId(otherPrincipal, p => p.Name);
var testItem1 = new TestCreatedBy.Simple { ID = Guid.NewGuid(), Name = "test1", AuthorID = otherPrincipal.ID };
var testItem2 = new TestCreatedBy.Simple { ID = Guid.NewGuid(), Name = "test2" };
repository.TestCreatedBy.Simple.Insert(testItem1, testItem2);
Assert.AreEqual(
"test1 " + otherUserName + ", test2 " + currentUserName,
TestUtility.DumpSorted(repository.TestCreatedBy.Simple
.Query(new[] { testItem1.ID, testItem2.ID })
.Select(item => item.Name + " " + item.Author.Name)));
}
}
示例14: Simple
public void Simple()
{
using (var container = new RhetosTestContainer())
{
var repository = container.Resolve<Common.DomRepository>();
var id1 = Guid.NewGuid();
var id2 = Guid.NewGuid();
container.Resolve<ISqlExecuter>().ExecuteSql(new[]
{
"DELETE FROM Test11.Source;",
"INSERT INTO Test11.Source (ID, Name) SELECT '" + id1 + "', 'a';",
"INSERT INTO Test11.Source (ID, Name) SELECT '" + id2 + "', 'b';"
});
var all = repository.Test11.QE.Query().ToArray();
Array.Sort(all, (a, b) => string.Compare(a.Info, b.Info));
Assert.AreEqual(2, all.Length);
Assert.AreEqual("ax", all[0].Info);
Assert.AreEqual(id1, all[0].Base.ID);
Assert.AreEqual("a", all[0].Base.Name);
Assert.AreEqual(id1, all[0].ID);
Assert.AreEqual("bx", all[1].Info);
Assert.AreEqual(id2, all[1].Base.ID);
Assert.AreEqual("b", all[1].Base.Name);
Assert.AreEqual(id2, all[1].ID);
}
}
示例15: Complex
public void Complex()
{
using (var container = new RhetosTestContainer())
{
container.Resolve<ISqlExecuter>().ExecuteSql(new[]
{
"DELETE FROM TestLogging.Complex",
"DELETE FROM TestLogging.Simple",
});
var repository = container.Resolve<Common.DomRepository>();
var id = Guid.NewGuid();
var simple = new TestLogging.Simple { ID = Guid.NewGuid() };
repository.TestLogging.Simple.Insert(new[] { simple });
var complex = new TestLogging.Complex
{
bi = new byte[] { 1, 2, 3 },
bo = true,
da = new DateTime(2001, 2, 3),
t = new DateTime(2001, 2, 3, 4, 5, 6),
de = 123.4567m,
g = Guid.NewGuid(),
ls = "abc",
m = 11.22m,
r = simple
};
repository.TestLogging.Complex.Insert(new[] { complex });
complex.ls = "def";
repository.TestLogging.Complex.Update(new[] { complex });
repository.TestLogging.Complex.Delete(new[] { complex });
var ids = new Guid?[] { simple.ID, complex.ID };
var ins = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Insert" && ids.Contains(log.ItemId)).Single();
var upd = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Update" && ids.Contains(log.ItemId)).Single();
var del = repository.Common.Log.Query().Where(log => log.TableName == "TestLogging.Complex" && log.Action == "Delete" && ids.Contains(log.ItemId)).Single();
Assert.AreEqual("", ins.Description);
Assert.AreEqual(@"<PREVIOUS ls=""abc"" />", upd.Description);
Console.WriteLine(del.Description);
var description = del.Description.Split(' ').OrderBy(x => x).ToList();
Assert.AreEqual(@"/>", description[0]);
Assert.AreEqual(@"<PREVIOUS", description[1]);
Assert.AreEqual(@"bi=""0x010203""", description[2]);
Assert.AreEqual(@"bo=""1""", description[3]);
Assert.AreEqual(@"da=""2001-02-03""", description[4]);
Assert.IsTrue(new Regex(@"^de=""123\.45670*""$").IsMatch(description[5]));// optional additional zeros
Assert.AreEqual(@"g=""" + SqlUtility.GuidToString(complex.g.Value) + @"""", description[6]);
Assert.AreEqual(@"ls=""def""", description[7]);
Assert.AreEqual(@"m=""11.2200""", description[8]);
Assert.AreEqual(@"rID=""" + SqlUtility.GuidToString(simple.ID) + @"""", description[9]);
Assert.IsTrue(new Regex(@"^t=""2001-02-03T04:05:06(.0+)?""$").IsMatch(description[10]));// optional millisconds
}
}