public void TransientTest() { var transientCustomer = new Customer("A"); Assert.IsTrue(transientCustomer.IsTransient); // only check identity value is null or default id Assert.IsTrue(Repository.IsTransient(transientCustomer)); Assert.AreEqual(transientCustomer, new Customer("A")); // 둘다 아무 것도 바뀌지 않았으므로 var customer2 = SerializerTool.DeepCopy(TestCustomer); customer2.CompanyName = base.TestCustomer.CompanyName; Assert.AreEqual(base.TestCustomer, customer2); // 둘다 Transient이고, 같은 속성값들을 가진다. var savedCustomer = Repository.Get(base.TestCustomer.Id, LockMode.None); Assert.AreEqual(savedCustomer.CompanyName, TestCustomer.CompanyName); Assert.IsFalse(savedCustomer.IsTransient); Assert.IsTrue(savedCustomer != transientCustomer); Assert.AreNotEqual(savedCustomer, transientCustomer); // Persistent object .vs. transient object Assert.AreEqual(savedCustomer, TestCustomer); // Persistent object .vs. transient object (but id is equal ) Assert.IsTrue(savedCustomer.Equals(TestCustomer)); Assert.IsFalse(savedCustomer.IsTransient); Assert.IsFalse(Repository.IsTransient(savedCustomer)); // Assigned이지만 EntityStateInterceptor를 이용하면 AssignedId를 가지는 Entity도 Transient인지를 파악할 수 있다. // Assert.IsTrue(base.TestCustomer.IsTransient); Assert.IsTrue(Repository.IsTransient(TestCustomer)); // Console.WriteLine("Test NorthwindCustomer: " + savedCustomer); }
/// <summary> /// 지역화 정보를 가진 엔티티간에 지역화 정보를 복사한다. /// </summary> /// <typeparam name="TLocale">Locale 정보를 나타내는 class의 형식</typeparam> /// <param name="dest">복사될 지역화 엔티티</param> /// <param name="src">원본 지역화 엔티티</param> public static void CopyLocales <TLocale>(this ILocaledEntity <TLocale> dest, ILocaledEntity <TLocale> src) where TLocale : ILocaleValue { foreach (var culture in src.LocaleKeys) { dest.AddLocale(culture, SerializerTool.DeepCopy(src.Locales[culture])); } }