Mercurial > pub > bltoolkit
diff UnitTests/Linq/Model/ParentChild.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UnitTests/Linq/Model/ParentChild.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,510 @@ +using System; +using System.Collections.Generic; +using System.Reflection; + +using BLToolkit.Data.Linq; +using BLToolkit.DataAccess; +using BLToolkit.Mapping; + +namespace Data.Linq.Model +{ + #region Parent/Child/GrandChild + + public interface IParent + { + int ParentID { get; } + int? Value1 { get; } + } + + public class Parent : IEquatable<Parent>, IComparable + { + public int ParentID; + public int? Value1; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID")] + public List<Child> Children; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID")] + public List<GrandChild> GrandChildren; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID")] + public IEnumerable<Child> Children2 + { + get { return Children; } + } + + public override bool Equals(object obj) + { + if (obj.GetType() != typeof(Parent)) return false; + return Equals((Parent)obj); + } + + public bool Equals(Parent other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other.ParentID == ParentID && other.Value1.Equals(Value1); + } + + public override int GetHashCode() + { + unchecked { return (ParentID * 397) ^ (Value1 ?? 0); } + } + + public int CompareTo(object obj) + { + return ParentID - ((Parent)obj).ParentID; + } + + [Association(ThisKey = "ParentID", OtherKey = "ID")] + public LinqDataTypes Types; + } + + public class Child + { + [PrimaryKey] public int ParentID; + [PrimaryKey] public int ChildID; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID")] + public Parent Parent; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID", CanBeNull = false)] + public Parent1 Parent1; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID2", CanBeNull = false)] + public Parent3 ParentID2; + + [Association(ThisKey = "ParentID, ChildID", OtherKey = "ParentID, ChildID")] + public List<GrandChild> GrandChildren; + + public override bool Equals(object obj) + { + return Equals(obj as Child); + } + + public bool Equals(Child other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return other.ParentID == ParentID && other.ChildID == ChildID; + } + + public override int GetHashCode() + { + unchecked { return (ParentID * 397) ^ ChildID; } + } + } + + public class GrandChild : IEquatable<GrandChild> + { + public GrandChild() + { + + } + + public int? ParentID; + public int? ChildID; + public int? GrandChildID; + + [Association(ThisKey = "ParentID, ChildID", OtherKey = "ParentID, ChildID")] + public Child Child; + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof (GrandChild)) return false; + + return Equals((GrandChild)obj); + } + + public bool Equals(GrandChild other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return other.ParentID.Equals(ParentID) && other.ChildID.Equals(ChildID) && other.GrandChildID.Equals(GrandChildID); + } + + public override int GetHashCode() + { + unchecked + { + var result = ParentID.HasValue ? ParentID.Value : 0; + + result = (result * 397) ^ (ChildID. HasValue ? ChildID. Value : 0); + result = (result * 397) ^ (GrandChildID.HasValue ? GrandChildID.Value : 0); + + return result; + } + } + } + + [TableName("Parent")] + public class Parent3 : IEquatable<Parent3>, IComparable + { + [MapField("ParentID")] + public int ParentID2 { get; set; } + public int? Value1 { get; set; } + + public override bool Equals(object obj) + { + if (obj.GetType() != typeof (Parent3)) return false; + return Equals((Parent3)obj); + } + + public bool Equals(Parent3 other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other.ParentID2 == ParentID2 && other.Value1.Equals(Value1); + } + + public override int GetHashCode() + { + unchecked { return (ParentID2 * 397) ^ (Value1 ?? 0); } + } + + public int CompareTo(object obj) + { + return ParentID2 - ((Parent3)obj).ParentID2; + } + } + + [TableName("Parent")] + public class Parent4 : IEquatable<Parent4>, IComparable + { + public int ParentID; + public TypeValue Value1; + + public override bool Equals(object obj) + { + if (obj.GetType() != typeof (Parent4)) return false; + return Equals((Parent4)obj); + } + + public bool Equals(Parent4 other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other.ParentID == ParentID && other.Value1.Equals(Value1); + } + + public override int GetHashCode() + { + unchecked { return (ParentID * 397) ^ (int)Value1; } + } + + public int CompareTo(object obj) + { + return ParentID - ((Parent4)obj).ParentID; + } + } + + [TableName("Parent")] + public class Parent5 : IEquatable<Parent5>, IComparable + { + public int ParentID; + public int? Value1; + + [Association(ThisKey = "ParentID", OtherKey = "Value1", CanBeNull = true)] + public List<Parent5> Children; + + public override bool Equals(object obj) + { + if (obj.GetType() != typeof(Parent5)) return false; + return Equals((Parent5)obj); + } + + public bool Equals(Parent5 other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other.ParentID == ParentID && other.Value1.Equals(Value1); + } + + public override int GetHashCode() + { + unchecked { return (ParentID * 397) ^ (int)Value1; } + } + + public int CompareTo(object obj) + { + return ParentID - ((Parent5)obj).ParentID; + } + } + + #endregion + + #region Parent1/GrandChild1 + + [TableName("Parent")] + public class Parent1 : IEquatable<Parent1>, IComparable + { + [PrimaryKey] + public int ParentID; + public int? Value1; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID")] + public List<Child> Children; + + public override bool Equals(object obj) + { + if (obj.GetType() != typeof (Parent1)) return false; + return Equals((Parent1)obj); + } + + public bool Equals(Parent1 other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other.ParentID == ParentID; + } + + public override int GetHashCode() + { + unchecked { return ParentID * 397; } + } + + public int CompareTo(object obj) + { + return ParentID - ((Parent1)obj).ParentID; + } + } + + [TableName("GrandChild")] + public class GrandChild1 : IEquatable<GrandChild1> + { + public int ParentID; + public int? ChildID; + public int? GrandChildID; + + [Association(ThisKey = "ParentID, ChildID", OtherKey = "ParentID, ChildID")] + public Child Child; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID", CanBeNull = false)] + public Parent1 Parent; + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != typeof (GrandChild1)) return false; + + return Equals((GrandChild1)obj); + } + + public bool Equals(GrandChild1 other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + + return other.ParentID.Equals(ParentID) && other.ChildID.Equals(ChildID) && other.GrandChildID.Equals(GrandChildID); + } + + public override int GetHashCode() + { + unchecked + { + var result = ParentID; + + result = (result * 397) ^ (ChildID. HasValue ? ChildID. Value : 0); + result = (result * 397) ^ (GrandChildID.HasValue ? GrandChildID.Value : 0); + + return result; + } + } + } + + #endregion + + #region Inheritance + + [TableName("Parent")] + [InheritanceMapping(Code = null, Type = typeof(ParentInheritanceNull))] + [InheritanceMapping(Code = 1, Type = typeof(ParentInheritance1))] + [InheritanceMapping( Type = typeof(ParentInheritanceValue), IsDefault = true)] + public abstract class ParentInheritanceBase : IEquatable<ParentInheritanceBase>, IComparable + { + [PrimaryKey] + public int ParentID; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID")] + public List<Child> Children; + + public override bool Equals(object obj) + { + if (obj.GetType() != GetType()) return false; + return Equals((ParentInheritanceBase)obj); + } + + public bool Equals(ParentInheritanceBase other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return other.ParentID == ParentID; + } + + public override int GetHashCode() + { + return ParentID; + } + + public int CompareTo(object obj) + { + return ParentID - ((Parent)obj).ParentID; + } + } + + public class ParentInheritanceNull : ParentInheritanceBase + { + } + + public class ParentInheritance1 : ParentInheritanceBase, IEquatable<ParentInheritance1> + { + [MapField(IsInheritanceDiscriminator = true)] + public int Value1; + + public override bool Equals(object obj) + { + var ret = base.Equals(obj) && Equals((ParentInheritance1)obj); + return ret; + } + + public bool Equals(ParentInheritance1 other) + { + return base.Equals(other) && other.Value1.Equals(Value1); + } + + public override int GetHashCode() + { + unchecked { return (ParentID * 397) ^ Value1; } + } + } + + public class ParentInheritanceValue : ParentInheritanceBase + { + [MapField(IsInheritanceDiscriminator = true)] + public int Value1; + + public override bool Equals(object obj) + { + return base.Equals(obj) && Equals((ParentInheritanceValue)obj); + } + + public bool Equals(ParentInheritanceValue other) + { + return base.Equals(other) && other.Value1.Equals(Value1); + } + + public override int GetHashCode() + { + unchecked { return (ParentID * 397) ^ Value1; } + } + } + + #endregion + + #region Inheritance2 + + [TableName("Parent")] + [InheritanceMapping(Code = null, Type = typeof(ParentInheritanceBase2))] + [InheritanceMapping(Code = 1, Type = typeof(ParentInheritance12))] + [InheritanceMapping(Code = 2, Type = typeof(ParentInheritance12))] + public abstract class ParentInheritanceBase2 + { + [PrimaryKey] + public int ParentID; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID")] + public List<Child> Children; + } + + public class ParentInheritance12 : ParentInheritanceBase2 + { + [MapField(IsInheritanceDiscriminator = true)] + public int Value1; + } + + #endregion + + #region Inheritance3 + + [TableName("Parent")] + [InheritanceMapping(Code = null, Type = typeof(ParentInheritanceBase3))] + [InheritanceMapping(Code = 1, Type = typeof(ParentInheritance13))] + [InheritanceMapping(Code = 2, Type = typeof(ParentInheritance13))] + public abstract class ParentInheritanceBase3 + { + [PrimaryKey] + public int ParentID; + + [Association(ThisKey = "ParentID", OtherKey = "ParentID")] + public List<Child> Children; + } + + public class ParentInheritance13 : ParentInheritanceBase3 + { + [MapField("Value1", IsInheritanceDiscriminator = true)] + public int Value; + } + + #endregion + + #region Inheritance4 + + public enum Parent4Type + { + Value1 = 1, + Value2 = 2 + } + + [TableName("Parent")] + [InheritanceMapping(Code = (int)Parent4Type.Value1, Type = typeof(ParentInheritance14))] + [InheritanceMapping(Code = (int)Parent4Type.Value2, Type = typeof(ParentInheritance24))] + public abstract class ParentInheritanceBase4 + { + [PrimaryKey] + public int ParentID; + + public abstract Parent4Type Value1 { get; } + } + + public class ParentInheritance14 : ParentInheritanceBase4 + { + [MapField(IsInheritanceDiscriminator = true)] + public override Parent4Type Value1 { get { return Parent4Type.Value1; } } + } + + public class ParentInheritance24 : ParentInheritanceBase4 + { + [MapField(IsInheritanceDiscriminator = true)] + public override Parent4Type Value1 { get { return Parent4Type.Value2; } } + } + + #endregion + + public class Functions + { + private readonly IDataContext _ctx; + + public Functions(IDataContext ctx) + { + _ctx = ctx; + } + + [TableFunction(Name="GetParentByID")] + public Table<Parent> GetParentByID(int? id) + { + return _ctx.GetTable<Parent>(this, (MethodInfo)(MethodBase.GetCurrentMethod()), id); + } + + [TableExpression("{0} {1} WITH (TABLOCK)")] + public Table<T> WithTabLock<T>() + where T : class + { + return _ctx.GetTable<T>(this, ((MethodInfo)(MethodBase.GetCurrentMethod())).MakeGenericMethod(typeof(T))); + } + } +}