Click here to Skip to main content
15,896,726 members
Articles / Desktop Programming / Windows Forms

Three-tier .NET Application Utilizing Three ORM Technologies

Rate me:
Please Sign up or sign in to vote.
4.95/5 (118 votes)
30 Jan 2010CPOL109 min read 166.2K   4.4K   437  
LINQ to SQL, Entity Framework, and NHibernate used in a parallel fashion in a three-tier WinForms application.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using u=Util;
using s=System;
using ser=System.Runtime.Serialization;
using gt=GlobalType;

namespace DTO
{
	#region CodeWindow 019
	[ser.DataContract]
	public class ConcurrencyFault
	{
		[ser.DataMember] public string Description{get; private set;}
		public ConcurrencyFault(string strDescription)
		{
			Description = strDescription;
		}
	}
	#endregion
	[ser.DataContract]
	public class Ownership
	{
		public int NWAccntID		{get; private set;}
		public int ParticipantID	{get; private set;}
		public int Share			{get; private set;}
		public Ownership(
			int iNWAccntID		, 
			int iParticipantID	, 
			int iShare			)
		{
			NWAccntID		= iNWAccntID	;
			ParticipantID	= iParticipantID;
			Share			= iShare		;
		}
	}
	[ser.DataContract]
	public class Participant : gt.IParticipant
	{
		[ser.DataMember] public int    ID   {get; private set;}
		[ser.DataMember] public string Name {get; private set;}
		public Participant(
			int    argID   ,
			string argName )
		{
			ID    = argID   ;
			Name  = argName ;
		}
		public override string ToString()
		{
			return Name;
		}
	}

	[ser.DataContract]
	public class NWAccntDlt
	{
		[ser.DataMember] public int  NWAccntID {get; private set;}
		[ser.DataMember] public bool Budgeted  {get; private set;}
		[ser.DataMember] public int  Amount    {get; private set;}
		public NWAccntDlt(
			int  argNWAccntID ,
			bool argBudgeted  ,
			int  argAmount    )
		{
			NWAccntID  = argNWAccntID ;
			Budgeted   = argBudgeted  ;
			Amount     = argAmount    ;
		}
	}

	[ser.DataContract]
	public class Item
	{
		[ser.DataMember] public int              ID                      {get; private set;}
		[ser.DataMember] public string           Descrip                 {get; private set;}
		[ser.DataMember] public int              DltAllocAccntID         {get; private set;}
		[ser.DataMember] public bool             DltAllocAccntIsBudgeted {get; private set;}
		[ser.DataMember] public u.ROArray<int>	 ParticipantAmounts		 {get; private set;}
		public Item(
			int              argID                      ,
			string           argDescrip                 ,
			int              argDltAllocAccntID         ,
			bool             argDltAllocAccntIsBudgeted ,
			u.ROArray<int>	 argParticipantAmounts      )
		{
			ID                       = argID                      ;
			Descrip                  = argDescrip                 ;
			DltAllocAccntID          = argDltAllocAccntID         ;
			DltAllocAccntIsBudgeted  = argDltAllocAccntIsBudgeted ;
			ParticipantAmounts		 = argParticipantAmounts      ;
		}
	}

	#region CodeWindow 043
	[ser.DataContract]
	[ser.KnownType(typeof(OptionalDateRangeTransPred))]
	[ser.KnownType(typeof(BeforeTransPred			))]
	[ser.KnownType(typeof(OnOrAfterTransPred		))]
	[ser.KnownType(typeof(DateRangeTransPred		))]
	[ser.KnownType(typeof(IDTransPred				))]
	[ser.KnownType(typeof(IDRangeTransPred			))]
	[ser.KnownType(typeof(PostIDTransPred			))]
	[ser.KnownType(typeof(PostIDRangeTransPred		))]
	[ser.KnownType(typeof(MaxPostIDTransPred		))]
	[ser.KnownType(typeof(MinPostIDTransPred		))]
	[ser.KnownType(typeof(PostedTransPred			))]
	[ser.KnownType(typeof(UnPostedTransPred			))]
	public abstract class TransPred
	{
	}

	#region TransPred derived classes
	[ser.DataContract]
	public class OptionalDateRangeTransPred : TransPred
	{
		[ser.DataMember]public s.DateTime? OnOrAfter{get; private set;}	
		[ser.DataMember]public s.DateTime? Before	{get; private set;}
		public OptionalDateRangeTransPred(
			s.DateTime? dtOnOrAfter	, 
			s.DateTime? dtBefore	)
		{
			OnOrAfter	= dtOnOrAfter	;
			Before		= dtBefore		;
		}
	}
	[ser.DataContract]
	public class BeforeTransPred : TransPred
	{
		[ser.DataMember]public s.DateTime Before{get; private set;}
		public BeforeTransPred(s.DateTime dtBefore)
		{
			Before = dtBefore;
		}
	}
	[ser.DataContract]
	public class OnOrAfterTransPred : TransPred
	{
		[ser.DataMember]public s.DateTime OnOrAfter{get; private set;}
		public OnOrAfterTransPred(s.DateTime dtOnOrAfter)
		{
			OnOrAfter = dtOnOrAfter;
		}
	}
	[ser.DataContract]
	public class DateRangeTransPred : TransPred
	{
		[ser.DataMember]public s.DateTime OnOrAfter	{get; private set;}	
		[ser.DataMember]public s.DateTime Before	{get; private set;}
		public DateRangeTransPred(
			s.DateTime dtOnOrAfter	, 
			s.DateTime dtBefore		)
		{
			OnOrAfter	= dtOnOrAfter	;
			Before		= dtBefore		;
		}
	}
	[ser.DataContract]
	public class IDTransPred : TransPred
	{
		[ser.DataMember]public int ID{get; private set;}	
		public IDTransPred(int iID)
		{
			ID = iID;
		}
	}
	[ser.DataContract]
	public class IDRangeTransPred : TransPred
	{
		[ser.DataMember]public int SmallestID	{get; private set;}	
		[ser.DataMember]public int LargestID	{get; private set;}
		public IDRangeTransPred(
			int iSmallestID	, 
			int iLargestID	)
		{
			SmallestID	= iSmallestID	;
			LargestID	= iLargestID	;
		}
	}
	[ser.DataContract]
	public class PostIDTransPred : TransPred
	{
		[ser.DataMember]public int ID{get; private set;}	
		public PostIDTransPred(int iID)
		{
			ID = iID;
		}
	}
	[ser.DataContract]
	public class PostIDRangeTransPred : TransPred
	{
		[ser.DataMember]public int SmallestID	{get; private set;}	
		[ser.DataMember]public int LargestID	{get; private set;}
		public PostIDRangeTransPred(
			int iSmallestID	, 
			int iLargestID	)
		{
			SmallestID	= iSmallestID	;
			LargestID	= iLargestID	;
		}
	}
	[ser.DataContract]
	public class MaxPostIDTransPred : TransPred
	{
		[ser.DataMember]public int MaxID{get; private set;}	
		public MaxPostIDTransPred(int iMaxID)
		{
			MaxID = iMaxID;
		}
	}
	[ser.DataContract]
	public class MinPostIDTransPred : TransPred
	{
		[ser.DataMember]public int MinID{get; private set;}	
		public MinPostIDTransPred(int iMinID)
		{
			MinID = iMinID;
		}
	}
	[ser.DataContract]
	public class PostedTransPred : TransPred
	{
		
	}
	[ser.DataContract]
	public class UnPostedTransPred : TransPred
	{
		
	}
	
	#endregion
	#endregion
	//******************************

	[ser.DataContract]
	public class Dog
	{
		[ser.DataMember]public string	Name{	get; private set;}
		[ser.DataMember]public int		Age{	get; private set;}
		public Dog(string strName, int iAge)
		{
			Name	= strName	;
			Age		= iAge		;
		}
	}

	[ser.DataContract]
	public class ItemUpdate
	{
		[ser.DataMember] public int              TransactionID     {get; private set;}
		[ser.DataMember] public int              ItemID            {get; private set;}
		[ser.DataMember] public int              DltAllocAccntID   {get; private set;}
		[ser.DataMember] public u.ROArray<int>	 ParticipantAmounts{get; private set;}
		public ItemUpdate(
			int              argTransactionID     ,
			int              argItemID            ,
			int              argDltAllocAccntID   ,
			u.ROArray<int>	 argParticipantAmounts)
		{
			TransactionID      = argTransactionID     ;
			ItemID             = argItemID            ;
			DltAllocAccntID    = argDltAllocAccntID   ;
			ParticipantAmounts = argParticipantAmounts;
		}
	}
	[ser.DataContract]
	public class ItemEx
	{
		[ser.DataMember] public int              ItemID                 {get; private set;}
		[ser.DataMember] public int?             PostID                 {get; private set;}
		[ser.DataMember] public int              TransactionID          {get; private set;}
		[ser.DataMember] public gt.RowVersion    TransactionRowVersion  {get; private set;}
		[ser.DataMember] public int?             ParticipantID          {get; private set;}
		[ser.DataMember] public string           ParticipantName        {get; private set;}
		[ser.DataMember] public string           TransactionDescrip     {get; private set;}
		[ser.DataMember] public s.DateTime       TransactionDate        {get; private set;}
		[ser.DataMember] public string           Descrip                {get; private set;}
		[ser.DataMember] public int?             DltAllocAccntIDOrig    {get; private set;}
		[ser.DataMember] public string           DltAllocAccntNameOrig  {get; private set;}
		[ser.DataMember] public u.ROArray<int>	 ParticipantAmountsOrig {get; private set;}

		public ItemEx(
			int              argItemID                 ,
			int?             argPostID                 ,
			int              argTransactionID          ,
			gt.RowVersion    argTransactionRowVersion  ,
			int?             argParticipantID          ,
			string           argParticipantName        ,
			string           argTransactionDescrip     ,
			s.DateTime       argTransactionDate        ,
			string           argDescrip                ,
			int?             argDltAllocAccntIDOrig    ,
			string           argDltAllocAccntNameOrig  ,
			u.ROArray<int>	 argParticipantAmountsOrig )
		{
			ItemID                  = argItemID                 ;
			PostID                  = argPostID                 ;
			TransactionID           = argTransactionID          ;
			TransactionRowVersion	= argTransactionRowVersion	;
			ParticipantID           = argParticipantID          ;
			ParticipantName         = argParticipantName        ;
			TransactionDescrip      = argTransactionDescrip     ;
			TransactionDate         = argTransactionDate        ;
			Descrip                 = argDescrip                ;
			DltAllocAccntIDOrig     = argDltAllocAccntIDOrig    ;
			DltAllocAccntNameOrig   = argDltAllocAccntNameOrig  ;
			ParticipantAmountsOrig  = argParticipantAmountsOrig ;
		}
	}

	[ser.DataContract]
	public class NWAccntDltSum
	{
		[ser.DataMember] public int  NWAccntID {get; private set;}
		[ser.DataMember] public bool Budgeted  {get; private set;}
		[ser.DataMember] public int  Amount    {get; private set;}
		public NWAccntDltSum(
			int  argNWAccntID ,
			bool argBudgeted  ,
			int  argAmount    )
		{
			NWAccntID  = argNWAccntID ;
			Budgeted   = argBudgeted  ;
			Amount     = argAmount    ;
		}
	}
	[ser.DataContract]
	public class DltAllocSum
	{
		[ser.DataMember] public int            DltAllocAccntID    {get; private set;}
		[ser.DataMember] public bool           Budgeted           {get; private set;}
		[ser.DataMember] public u.ROArray<int> ParticipantAmounts {get; private set;}
		public DltAllocSum(
			int            argDltAllocAccntID    ,
			bool           argBudgeted           ,
			u.ROArray<int> argParticipantAmounts )
		{
			DltAllocAccntID     = argDltAllocAccntID    ;
			Budgeted            = argBudgeted           ;
			ParticipantAmounts  = argParticipantAmounts ;
		}
	}
	[ser.DataContract]
	public class BudgetDelta
	{
		[ser.DataMember] public int? Days       {get; private set;}
		[ser.DataMember] public int? Allocation {get; private set;}
		[ser.DataMember] public int  DltAllocs  {get; private set;}
		[ser.DataMember] public int  NWDlts     {get; private set;}
		public BudgetDelta(
			int? argDays       ,
			int? argAllocation ,
			int  argDltAllocs  ,
			int  argNWDlts     )
		{
			Days        = argDays       ;
			Allocation  = argAllocation ;
			DltAllocs   = argDltAllocs  ;
			NWDlts      = argNWDlts     ;
		}
	}
	[ser.DataContract]
	public class BudgetReport
	{
		[ser.DataMember]public BudgetDelta	ClippedFromStartDate	{get;private set;}
		[ser.DataMember]public BudgetDelta	ForMatchedTransactions	{get;private set;}

		public BudgetReport(
			BudgetDelta	oClippedFromStartDate	,
			BudgetDelta	oForMatchedTransactions	)
		{
			ClippedFromStartDate	= oClippedFromStartDate	;
			ForMatchedTransactions	= oForMatchedTransactions;
		}
	}
	[ser.DataContract]
	public class Summary
	{
		[ser.DataMember] public u.ROArray<NWAccntDltSum> NWAccntDltSums    {get; private set;}
		[ser.DataMember] public u.ROArray<DltAllocSum>   DltAllocSums      {get; private set;}
		[ser.DataMember] public u.ROArray<int>           ParticipantWashes {get; private set;}
		[ser.DataMember] public BudgetReport             TheBudgetReport   {get; private set;}
		public Summary(
			u.ROArray<NWAccntDltSum> argNWAccntDltSums    ,
			u.ROArray<DltAllocSum>   argDltAllocSums      ,
			u.ROArray<int>           argParticipantWashes ,
			BudgetReport             argTheBudgetReport   )
		{
			NWAccntDltSums     = argNWAccntDltSums    ;
			DltAllocSums       = argDltAllocSums      ;
			ParticipantWashes  = argParticipantWashes ;
			TheBudgetReport    = argTheBudgetReport   ;
		}
	}
	[ser.DataContract]
	public class NWAccntDltEx
	{
		[ser.DataMember] public int        TransID      {get; private set;}
		[ser.DataMember] public int?       PostID       {get; private set;}
		[ser.DataMember] public string     TransDescrip {get; private set;}
		[ser.DataMember] public s.DateTime TransInstant {get; private set;}
		[ser.DataMember] public int        Amount       {get; private set;}
		public NWAccntDltEx(
			int        argTransID      ,
			int?       argPostID       ,
			string     argTransDescrip ,
			s.DateTime argTransInstant ,
			int        argAmount       )
		{
			TransID       = argTransID      ;
			PostID        = argPostID       ;
			TransDescrip  = argTransDescrip ;
			TransInstant  = argTransInstant ;
			Amount        = argAmount       ;
		}
	}
	[ser.DataContract]
	public class DltAlloc
	{
		[ser.DataMember] public int            TransID            {get; private set;}
		[ser.DataMember] public int?           PostID             {get; private set;}
		[ser.DataMember] public string         TransDescrip       {get; private set;}
		[ser.DataMember] public DateTime       TransInstant       {get; private set;}
		[ser.DataMember] public int            ItemID             {get; private set;}
		[ser.DataMember] public string         ItemDescrip        {get; private set;}
		[ser.DataMember] public u.ROArray<int> ParticipantAmounts {get; private set;}
		public DltAlloc(
			int            argTransID            ,
			int?           argPostID             ,
			string         argTransDescrip       ,
			DateTime       argTransInstant       ,
			int            argItemID             ,
			string         argItemDescrip        ,
			u.ROArray<int> argParticipantAmounts )
		{
			TransID             = argTransID            ;
			PostID              = argPostID             ;
			TransDescrip        = argTransDescrip       ;
			TransInstant        = argTransInstant       ;
			ItemID              = argItemID             ;
			ItemDescrip         = argItemDescrip        ;
			ParticipantAmounts  = argParticipantAmounts ;
		}
	}
	[ser.DataContract]
	public class Cache
	{
		[ser.DataContract]
		public class NWAccnt
		{
			[ser.DataMember] public int    ID       {get; private set;}
			[ser.DataMember] public bool   Budgeted {get; private set;}
			[ser.DataMember] public string Name     {get; private set;}
			public NWAccnt(
				int    argID       ,
				bool   argBudgeted ,
				string argName     )
			{
				ID        = argID       ;
				Budgeted  = argBudgeted ;
				Name      = argName     ;
			}
		}

		[ser.DataContract]
		public class DltAllocAccnt
		{
			[ser.DataMember] public int    ID       {get; private set;}
			[ser.DataMember] public bool   Budgeted {get; private set;}
			[ser.DataMember] public string Name     {get; private set;}
			public DltAllocAccnt(
				int    argID       ,
				bool   argBudgeted ,
				string argName     )
			{
				ID        = argID       ;
				Budgeted  = argBudgeted ;
				Name      = argName     ;
			}
		}

		[ser.DataContract]
		public class Ownership
		{
			[ser.DataMember] public int NWAccntID     {get; private set;}
			[ser.DataMember] public int ParticipantID {get; private set;}
			[ser.DataMember] public int Share         {get; private set;}
			public Ownership(
				int argNWAccntID     ,
				int argParticipantID ,
				int argShare         )
			{
				NWAccntID      = argNWAccntID     ;
				ParticipantID  = argParticipantID ;
				Share          = argShare         ;
			}
		}
		[ser.DataMember]public u.ROArray<NWAccnt>		NWAccnts;
		[ser.DataMember]public u.ROArray<DltAllocAccnt> DltAllocAccnts;
		[ser.DataMember]public u.ROArray<Ownership>		Ownerships;
		public  Cache(
			u.ROArray<NWAccnt>		 argNWAccnts		, 
			u.ROArray<DltAllocAccnt> argDltAllocAccnts	, 
			u.ROArray<Ownership>	 argOwnerships		)
		{
			NWAccnts		= argNWAccnts		;
			DltAllocAccnts	= argDltAllocAccnts	;
			Ownerships		= argOwnerships		;
		}
	}
	[ser.DataContract]
	public class Transaction
	{
		[ser.DataMember] public int?                  ID             {get; private set;}
		[ser.DataMember] public gt.RowVersion		  TheRowVersion	 {get; private set;}
		[ser.DataMember] public int?                  PostID         {get; private set;}
		[ser.DataMember] public int?                  ParticipantID  {get; private set;}
		[ser.DataMember] public string                Descrip        {get; private set;}
		[ser.DataMember] public s.DateTime            Instant        {get; private set;}
		[ser.DataMember] public u.ROArray<int>        ParticipantIDs {get; private set;}
		[ser.DataMember] public u.ROArray<NWAccntDlt> NWAccntDlts    {get; private set;}
		[ser.DataMember] public u.ROArray<Item>       Items          {get; private set;}
		[ser.DataMember] public u.ROArray<int>        WashAmounts    {get; private set;}
		public Transaction(
			int?                  argID             ,
			gt.RowVersion		  argRowVersion		,
			int?                  argPostID         ,
			int?                  argParticipantID  ,
			string                argDescrip        ,
			s.DateTime            argInstant        ,
			u.ROArray<int>        argParticipantIDs ,
			u.ROArray<NWAccntDlt> argNWAccntDlts    ,
			u.ROArray<Item>       argItems          ,
			u.ROArray<int>        argWashAmounts    )
		{
			ID              = argID             ;
			TheRowVersion	= argRowVersion		;
			PostID          = argPostID         ;
			ParticipantID   = argParticipantID  ;
			Descrip         = argDescrip        ;
			Instant         = argInstant        ;
			ParticipantIDs  = argParticipantIDs ;
			NWAccntDlts     = argNWAccntDlts    ;
			Items           = argItems          ;
			WashAmounts     = argWashAmounts    ;
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Austin Regional Clinic
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions