Вы находитесь на странице: 1из 2

using System.

IO;
using System.Reflection;
using NUnit.Framework;
using ODX.Core;
using ODX.LazyUnitTester;

namespace Refresh
{
[Table("Human")]
public abstract class Human : Entity
{
public abstract string Name { get; set;}
public abstract int Age { get; set;}

[Column("MasterID")]
public abstract IEntityList<Pet> Pets { get; }
}

[Table("Pet")]
public abstract class Pet : Entity
{
public abstract string Name { get; set;}
public abstract Human Master { get; set; }
}

[TestFixture]
public class C10_Refresh
{
[TestBody]
static void Main()
{
const string filename = "pets.xml";
if (File.Exists(filename))
File.Delete(filename);

Session s1 = new Session(new XmlDataProvider(filename));


s1.RegisterAssembly(Assembly.GetExecutingAssembly());
s1.Prepare();

Session s2 = new Session(new XmlDataProvider(filename));


s2.RegisterAssembly(Assembly.GetExecutingAssembly());
s2.Prepare();

// 1. Create and save object throug session s1


Human john = s1.Create<Human>();
john.Name = "John";
john.Age = 23;

Pet cat = s1.Create<Pet>();


cat.Name = "Molly";
john.Pets.Add(cat);

s1.Save();

// load, modify and save objects through session s2


Human john2 = s2.SelectOne<Human>();
john2.Age = 30;
Pet cat2 = s2.SelectOne<Pet>();
cat2.Delete(); // BUG!!! Refresh can't see deletions!!!
Pet dog = s2.Create<Pet>();
dog.Name = "Beethoven";
dog.Master = john2;

s2.Save();

//look what session s1 stores in memory


LUT.WriteLine("BEFORE REFRESH:");
DescribeHuman(john);

// Refresh (reload from storage)


s1.Refresh();
LUT.WriteLine("AFTER REFRESH:");
DescribeHuman(john);
}

private static void DescribeHuman(Human john)


{
LUT.WriteLine("Now {0} is {1}. He masters", john.Name, john.Age);
foreach (Pet pet in john.Pets)
LUT.WriteLine("\t{0}", pet.Name);
LUT.WriteLine();
LUT.WriteLine("------------------------");
}

[Test]
public void Test()
{
LUT.Execute(Main);
}
}
}

Вам также может понравиться