<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>dddpds Work Item Rss Feed</title><link>http://www.codeplex.com/dddpds/WorkItem/List.aspx</link><description>dddpds Work Item Rss Description</description><item><title>Closed Feature: Enhanced UnitOfWork Implementation [20739]</title><link>http://dddpds.codeplex.com/workitem/20739</link><description>Tim,&lt;br /&gt;&lt;br /&gt;Your book has provided much inspiration and shown practical applications of Evan&amp;#39;s work.  The last few months has been really fun for me, and now my team is also starting to work with DDD and catching the bug, as well.  I have made a modification to the UnitOfWork.cs implementation&amp;#59; actually it is mostly a rewrite.  I wanted to share it with you and everyone else, in case in comes in handy.&lt;br /&gt;&lt;br /&gt;The inspiration was that the UOW felt arbitrary, in the order that it actually persisted the entities.  When starting to use &amp;#40;a modified version of&amp;#41; the code in the book, I ran into a couple of issues where I felt that the UOW would work better for my purposes if it was sequentially executed.  I ran into this when I wanted to use a single UOW inside a Domain Service that coordinated calls between two different Repository implementations.  The order that I needed some of the database operations to happen in were the same order by which the code called them.&lt;br /&gt;&lt;br /&gt;So, this is what I came up with&amp;#58;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;    &amp;#47;&amp;#47;&amp;#47; Provides a distinct unit of work to be conducted for a type of entity.&lt;br /&gt;    &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;    public sealed class UnitOfWork &amp;#58; IUnitOfWork&lt;br /&gt;    &amp;#123;&lt;br /&gt;        &amp;#35;region Constructors&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Initializes a new instance of the &amp;#60;see cref&amp;#61;&amp;#34;UnitOfWork&amp;#34;&amp;#47;&amp;#62; class.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        public UnitOfWork&amp;#40;&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            this.Operations &amp;#61; new List&amp;#60;Operation&amp;#62;&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#35;endregion&lt;br /&gt;&lt;br /&gt;        &amp;#35;region Enumerations&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Provides the type of persistence operation to run.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        private enum OperationType&lt;br /&gt;        &amp;#123;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Operation for an add.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            Add,&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Operation for a delete.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            Delete,&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Operation for an update.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            Update&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#35;endregion&lt;br /&gt;&lt;br /&gt;        &amp;#35;region Private Property Declarations&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Gets or sets the operations.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The operations in this unit of work.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;        private List&amp;#60;Operation&amp;#62; Operations &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#35;endregion&lt;br /&gt;&lt;br /&gt;        &amp;#35;region Public Methods&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Commits all batched changes within the scope of a &amp;#60;see cref&amp;#61;&amp;#34;TransactionScope&amp;#34; &amp;#47;&amp;#62;.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        public void Commit&amp;#40;&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            using &amp;#40;var scope &amp;#61; new TransactionScope&amp;#40;&amp;#41;&amp;#41;&lt;br /&gt;            &amp;#123;&lt;br /&gt;                foreach &amp;#40;var operation in this.Operations.OrderBy&amp;#40;o &amp;#61;&amp;#62; o.ProcessDate&amp;#41;&amp;#41;&lt;br /&gt;                &amp;#123;&lt;br /&gt;                    switch &amp;#40;operation.Type&amp;#41;&lt;br /&gt;                    &amp;#123;&lt;br /&gt;                        case OperationType.Add&amp;#58;&lt;br /&gt;                            operation.Repository.PersistNewItem&amp;#40;operation.Entity&amp;#41;&amp;#59;&lt;br /&gt;                            break&amp;#59;&lt;br /&gt;                        case OperationType.Delete&amp;#58;&lt;br /&gt;                            operation.Repository.PersistDeletedItem&amp;#40;operation.Entity&amp;#41;&amp;#59;&lt;br /&gt;                            break&amp;#59;&lt;br /&gt;                        case OperationType.Update&amp;#58;&lt;br /&gt;                            operation.Repository.PersistUpdatedItem&amp;#40;operation.Entity&amp;#41;&amp;#59;&lt;br /&gt;                            break&amp;#59;&lt;br /&gt;                    &amp;#125;&lt;br /&gt;                &amp;#125;&lt;br /&gt;&lt;br /&gt;                scope.Complete&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;            &amp;#125;&lt;br /&gt;&lt;br /&gt;            this.Operations.Clear&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Registers an &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62; instance to be added through this &amp;#60;see cref&amp;#61;&amp;#34;UnitOfWork&amp;#34; &amp;#47;&amp;#62;.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;entity&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62;.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;repository&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IUnitOfWorkRepository&amp;#34; &amp;#47;&amp;#62; participating in the transaction.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        public void RegisterAdded&amp;#40;IEntity entity, IUnitOfWorkRepository repository&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            this.Operations.Add&amp;#40;&lt;br /&gt;                new Operation&lt;br /&gt;                    &amp;#123;&lt;br /&gt;                        Entity &amp;#61; entity, &lt;br /&gt;                        ProcessDate &amp;#61; DateTime.Now, &lt;br /&gt;                        Repository &amp;#61; repository, &lt;br /&gt;                        Type &amp;#61; OperationType.Add &lt;br /&gt;                    &amp;#125;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Registers an &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62; instance to be changed through this &amp;#60;see cref&amp;#61;&amp;#34;UnitOfWork&amp;#34; &amp;#47;&amp;#62;.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;entity&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62;.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;repository&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IUnitOfWorkRepository&amp;#34; &amp;#47;&amp;#62; participating in the transaction.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        public void RegisterChanged&amp;#40;IEntity entity, IUnitOfWorkRepository repository&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            this.Operations.Add&amp;#40;&lt;br /&gt;                new Operation&lt;br /&gt;                    &amp;#123;&lt;br /&gt;                        Entity &amp;#61; entity,&lt;br /&gt;                        ProcessDate &amp;#61; DateTime.Now,&lt;br /&gt;                        Repository &amp;#61; repository,&lt;br /&gt;                        Type &amp;#61; OperationType.Update&lt;br /&gt;                    &amp;#125;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Registers an &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62; instance to be deleted through this &amp;#60;see cref&amp;#61;&amp;#34;UnitOfWork&amp;#34; &amp;#47;&amp;#62;.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;entity&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62;.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;repository&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IUnitOfWorkRepository&amp;#34; &amp;#47;&amp;#62; participating in the transaction.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        public void RegisterDeleted&amp;#40;IEntity entity, IUnitOfWorkRepository repository&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            this.Operations.Add&amp;#40;&lt;br /&gt;                new Operation&lt;br /&gt;                &amp;#123;&lt;br /&gt;                    Entity &amp;#61; entity,&lt;br /&gt;                    ProcessDate &amp;#61; DateTime.Now,&lt;br /&gt;                    Repository &amp;#61; repository,&lt;br /&gt;                    Type &amp;#61; OperationType.Delete&lt;br /&gt;                &amp;#125;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#35;endregion&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Provides a snapshot of an entity and the repository reference it belongs to.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        private sealed class Operation&lt;br /&gt;        &amp;#123;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Gets or sets the entity.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The entity.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;            public IEntity Entity &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Gets or sets the process date.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The process date.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;            public DateTime ProcessDate &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Gets or sets the repository.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The repository.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;            public IUnitOfWorkRepository Repository &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Gets or sets the type of operation.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The type of operation.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;            public OperationType Type &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;        &amp;#125;&lt;br /&gt;    &amp;#125;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The general concept is that instead of storing the three types of operations separately and going through the lists in a grouped order, I would contain them all with a single type of class, the private Operation class.  It simply tracks the same information that the old Dictionary&amp;#60;&amp;#62; instances did, but adds a DateTime and an OperationType enumeration value.  Instead of three loops &amp;#40;one for each of the previous operation type&amp;#41;, it is replaced by a single loop with a switch&amp;#40;&amp;#41; statement.  The List&amp;#60;Operation&amp;#62; instance is just ordered by the DateTime and executed in order.&lt;br /&gt;&lt;br /&gt;Two things are missing - well, one is missing, and one is my personal preference.  The first, is that I don&amp;#39;t have the ClientTransactionRepository implementation in here, as I had removed it from my local implementation.  It should be very easy to add it back in, though.  The second is that the UOW has an explicit Commit&amp;#40;&amp;#41; method, but no explicit way to execute what is the UOW with an implied rollback &amp;#40;thinking about unit testing here, where I can still go through the queue but keep the database pristine to get beyond testing with mocks - but that is another story for another day.&amp;#41;&lt;br /&gt;&lt;br /&gt;Anyhow, I hope that someone finds this useful.  It is just nice to be able to give something back.&lt;br /&gt;&lt;br /&gt;Thanks&amp;#33;&lt;br /&gt;&lt;br /&gt;Joseph&lt;br /&gt;Comments: Resolved with changeset 60703.</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 06:23:35 GMT</pubDate><guid isPermaLink="false">Closed Feature: Enhanced UnitOfWork Implementation [20739] 20110512062335A</guid></item><item><title>Created Feature: Enhanced UnitOfWork Implementation [20739]</title><link>http://dddpds.codeplex.com/workitem/20739</link><description>Tim,&lt;br /&gt;&lt;br /&gt;Your book has provided much inspiration and shown practical applications of Evan&amp;#39;s work.  The last few months has been really fun for me, and now my team is also starting to work with DDD and catching the bug, as well.  I have made a modification to the UnitOfWork.cs implementation&amp;#59; actually it is mostly a rewrite.  I wanted to share it with you and everyone else, in case in comes in handy.&lt;br /&gt;&lt;br /&gt;The inspiration was that the UOW felt arbitrary, in the order that it actually persisted the entities.  When starting to use &amp;#40;a modified version of&amp;#41; the code in the book, I ran into a couple of issues where I felt that the UOW would work better for my purposes if it was sequentially executed.  I ran into this when I wanted to use a single UOW inside a Domain Service that coordinated calls between two different Repository implementations.  The order that I needed some of the database operations to happen in were the same order by which the code called them.&lt;br /&gt;&lt;br /&gt;So, this is what I came up with&amp;#58;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;    &amp;#47;&amp;#47;&amp;#47; Provides a distinct unit of work to be conducted for a type of entity.&lt;br /&gt;    &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;    public sealed class UnitOfWork &amp;#58; IUnitOfWork&lt;br /&gt;    &amp;#123;&lt;br /&gt;        &amp;#35;region Constructors&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Initializes a new instance of the &amp;#60;see cref&amp;#61;&amp;#34;UnitOfWork&amp;#34;&amp;#47;&amp;#62; class.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        public UnitOfWork&amp;#40;&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            this.Operations &amp;#61; new List&amp;#60;Operation&amp;#62;&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#35;endregion&lt;br /&gt;&lt;br /&gt;        &amp;#35;region Enumerations&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Provides the type of persistence operation to run.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        private enum OperationType&lt;br /&gt;        &amp;#123;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Operation for an add.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            Add,&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Operation for a delete.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            Delete,&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Operation for an update.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            Update&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#35;endregion&lt;br /&gt;&lt;br /&gt;        &amp;#35;region Private Property Declarations&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Gets or sets the operations.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The operations in this unit of work.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;        private List&amp;#60;Operation&amp;#62; Operations &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#35;endregion&lt;br /&gt;&lt;br /&gt;        &amp;#35;region Public Methods&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Commits all batched changes within the scope of a &amp;#60;see cref&amp;#61;&amp;#34;TransactionScope&amp;#34; &amp;#47;&amp;#62;.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        public void Commit&amp;#40;&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            using &amp;#40;var scope &amp;#61; new TransactionScope&amp;#40;&amp;#41;&amp;#41;&lt;br /&gt;            &amp;#123;&lt;br /&gt;                foreach &amp;#40;var operation in this.Operations.OrderBy&amp;#40;o &amp;#61;&amp;#62; o.ProcessDate&amp;#41;&amp;#41;&lt;br /&gt;                &amp;#123;&lt;br /&gt;                    switch &amp;#40;operation.Type&amp;#41;&lt;br /&gt;                    &amp;#123;&lt;br /&gt;                        case OperationType.Add&amp;#58;&lt;br /&gt;                            operation.Repository.PersistNewItem&amp;#40;operation.Entity&amp;#41;&amp;#59;&lt;br /&gt;                            break&amp;#59;&lt;br /&gt;                        case OperationType.Delete&amp;#58;&lt;br /&gt;                            operation.Repository.PersistDeletedItem&amp;#40;operation.Entity&amp;#41;&amp;#59;&lt;br /&gt;                            break&amp;#59;&lt;br /&gt;                        case OperationType.Update&amp;#58;&lt;br /&gt;                            operation.Repository.PersistUpdatedItem&amp;#40;operation.Entity&amp;#41;&amp;#59;&lt;br /&gt;                            break&amp;#59;&lt;br /&gt;                    &amp;#125;&lt;br /&gt;                &amp;#125;&lt;br /&gt;&lt;br /&gt;                scope.Complete&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;            &amp;#125;&lt;br /&gt;&lt;br /&gt;            this.Operations.Clear&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Registers an &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62; instance to be added through this &amp;#60;see cref&amp;#61;&amp;#34;UnitOfWork&amp;#34; &amp;#47;&amp;#62;.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;entity&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62;.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;repository&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IUnitOfWorkRepository&amp;#34; &amp;#47;&amp;#62; participating in the transaction.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        public void RegisterAdded&amp;#40;IEntity entity, IUnitOfWorkRepository repository&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            this.Operations.Add&amp;#40;&lt;br /&gt;                new Operation&lt;br /&gt;                    &amp;#123;&lt;br /&gt;                        Entity &amp;#61; entity, &lt;br /&gt;                        ProcessDate &amp;#61; DateTime.Now, &lt;br /&gt;                        Repository &amp;#61; repository, &lt;br /&gt;                        Type &amp;#61; OperationType.Add &lt;br /&gt;                    &amp;#125;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Registers an &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62; instance to be changed through this &amp;#60;see cref&amp;#61;&amp;#34;UnitOfWork&amp;#34; &amp;#47;&amp;#62;.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;entity&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62;.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;repository&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IUnitOfWorkRepository&amp;#34; &amp;#47;&amp;#62; participating in the transaction.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        public void RegisterChanged&amp;#40;IEntity entity, IUnitOfWorkRepository repository&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            this.Operations.Add&amp;#40;&lt;br /&gt;                new Operation&lt;br /&gt;                    &amp;#123;&lt;br /&gt;                        Entity &amp;#61; entity,&lt;br /&gt;                        ProcessDate &amp;#61; DateTime.Now,&lt;br /&gt;                        Repository &amp;#61; repository,&lt;br /&gt;                        Type &amp;#61; OperationType.Update&lt;br /&gt;                    &amp;#125;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Registers an &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62; instance to be deleted through this &amp;#60;see cref&amp;#61;&amp;#34;UnitOfWork&amp;#34; &amp;#47;&amp;#62;.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;entity&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IEntity&amp;#34; &amp;#47;&amp;#62;.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;param name&amp;#61;&amp;#34;repository&amp;#34;&amp;#62;The &amp;#60;see cref&amp;#61;&amp;#34;IUnitOfWorkRepository&amp;#34; &amp;#47;&amp;#62; participating in the transaction.&amp;#60;&amp;#47;param&amp;#62;&lt;br /&gt;        public void RegisterDeleted&amp;#40;IEntity entity, IUnitOfWorkRepository repository&amp;#41;&lt;br /&gt;        &amp;#123;&lt;br /&gt;            this.Operations.Add&amp;#40;&lt;br /&gt;                new Operation&lt;br /&gt;                &amp;#123;&lt;br /&gt;                    Entity &amp;#61; entity,&lt;br /&gt;                    ProcessDate &amp;#61; DateTime.Now,&lt;br /&gt;                    Repository &amp;#61; repository,&lt;br /&gt;                    Type &amp;#61; OperationType.Delete&lt;br /&gt;                &amp;#125;&amp;#41;&amp;#59;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;        &amp;#35;endregion&lt;br /&gt;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; Provides a snapshot of an entity and the repository reference it belongs to.&lt;br /&gt;        &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;        private sealed class Operation&lt;br /&gt;        &amp;#123;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Gets or sets the entity.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The entity.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;            public IEntity Entity &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Gets or sets the process date.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The process date.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;            public DateTime ProcessDate &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Gets or sets the repository.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The repository.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;            public IUnitOfWorkRepository Repository &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; Gets or sets the type of operation.&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;&amp;#47;summary&amp;#62;&lt;br /&gt;            &amp;#47;&amp;#47;&amp;#47; &amp;#60;value&amp;#62;The type of operation.&amp;#60;&amp;#47;value&amp;#62;&lt;br /&gt;            public OperationType Type &amp;#123; get&amp;#59; set&amp;#59; &amp;#125;&lt;br /&gt;        &amp;#125;&lt;br /&gt;    &amp;#125;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The general concept is that instead of storing the three types of operations separately and going through the lists in a grouped order, I would contain them all with a single type of class, the private Operation class.  It simply tracks the same information that the old Dictionary&amp;#60;&amp;#62; instances did, but adds a DateTime and an OperationType enumeration value.  Instead of three loops &amp;#40;one for each of the previous operation type&amp;#41;, it is replaced by a single loop with a switch&amp;#40;&amp;#41; statement.  The List&amp;#60;Operation&amp;#62; instance is just ordered by the DateTime and executed in order.&lt;br /&gt;&lt;br /&gt;Two things are missing - well, one is missing, and one is my personal preference.  The first, is that I don&amp;#39;t have the ClientTransactionRepository implementation in here, as I had removed it from my local implementation.  It should be very easy to add it back in, though.  The second is that the UOW has an explicit Commit&amp;#40;&amp;#41; method, but no explicit way to execute what is the UOW with an implied rollback &amp;#40;thinking about unit testing here, where I can still go through the queue but keep the database pristine to get beyond testing with mocks - but that is another story for another day.&amp;#41;&lt;br /&gt;&lt;br /&gt;Anyhow, I hope that someone finds this useful.  It is just nice to be able to give something back.&lt;br /&gt;&lt;br /&gt;Thanks&amp;#33;&lt;br /&gt;&lt;br /&gt;Joseph&lt;br /&gt;</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 06:11:04 GMT</pubDate><guid isPermaLink="false">Created Feature: Enhanced UnitOfWork Implementation [20739] 20110512061104A</guid></item><item><title>Commented Issue: Entity equality does not work in all cases [20736]</title><link>http://dddpds.codeplex.com/workitem/20736</link><description>Hi Tim,&lt;br /&gt;&lt;br /&gt;I have come across a very subtle bug in the EntityBase &amp;#61;&amp;#61; operator overload method in the following statement&amp;#58;&lt;br /&gt;&lt;br /&gt;if &amp;#40;base1.Key &amp;#33;&amp;#61; base2.Key&amp;#41;&lt;br /&gt;&lt;br /&gt;This does not work if the base1.Key and base2.Key properties don&amp;#39;t reference the same Guid object, but have the same value.  The statement does work if both Key properties reference the same Guid object.  The fix for this bug is to replace the statement with this one&amp;#58;&lt;br /&gt;&lt;br /&gt;if &amp;#40;base1.Key.Equals&amp;#40;base2.Key&amp;#41;&amp;#41;&lt;br /&gt;&lt;br /&gt;This second statement works fine in all cases.  The reason for this has to do with the fact that the &amp;#61;&amp;#61; and &amp;#33;&amp;#61; operator overloads are not virtual whereas the Equals method is virtual.  So, what happens in the first statement is that the &amp;#33;&amp;#61; operator overload for the System.Object class is called and not the overload defined in the Guid class, since the Key property is declared as type object.  This causes a reference comparison and not a value comparison.  A value comparison is what is needed for this operator overload to work as needed.  The second statement will cause the Equals method of the Guid struct to be called and not the one defined for the System.Object class, since it is virtual, and the correct value comparison between the two  Guids is done, instead of a reference comparison.&lt;br /&gt;&lt;br /&gt;Here is a unit test that demonstrates the issue&amp;#58;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        public void EntitiesAreEqualIfDifferentEntityAndKeyObjectsButSameKeyValue&amp;#40;&amp;#41;&lt;br /&gt;&lt;br /&gt;        &amp;#123;&lt;br /&gt;&lt;br /&gt;            EntityBase entity1 &amp;#61; new EntityBase&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Guid id2 &amp;#61; new Guid&amp;#40;entity1.Key.ToString&amp;#40;&amp;#41;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            EntityBase entity2 &amp;#61; new EntityBase&amp;#40;id2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.AreEqual&amp;#40;entity1.Key, entity2.Key&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.AreEqual&amp;#40;entity1, entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsTrue&amp;#40;entity1.Equals&amp;#40;entity2&amp;#41;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsTrue&amp;#40;entity1 &amp;#61;&amp;#61; entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsFalse&amp;#40;entity1 &amp;#33;&amp;#61; entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;This unit test will fail on the second Assert.  When I change the EntityBase &amp;#61;&amp;#61; operator overload method with the new statement above, this unit test passes.&lt;br /&gt;Comments: ** Comment from web user: tmccart1 ** &lt;p&gt;Thanks for finding that rkanagy&amp;#33;&lt;/p&gt;</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 05:36:22 GMT</pubDate><guid isPermaLink="false">Commented Issue: Entity equality does not work in all cases [20736] 20110512053622A</guid></item><item><title>Closed Issue: Entity equality does not work in all cases [20736]</title><link>http://dddpds.codeplex.com/workitem/20736</link><description>Hi Tim,&lt;br /&gt;&lt;br /&gt;I have come across a very subtle bug in the EntityBase &amp;#61;&amp;#61; operator overload method in the following statement&amp;#58;&lt;br /&gt;&lt;br /&gt;if &amp;#40;base1.Key &amp;#33;&amp;#61; base2.Key&amp;#41;&lt;br /&gt;&lt;br /&gt;This does not work if the base1.Key and base2.Key properties don&amp;#39;t reference the same Guid object, but have the same value.  The statement does work if both Key properties reference the same Guid object.  The fix for this bug is to replace the statement with this one&amp;#58;&lt;br /&gt;&lt;br /&gt;if &amp;#40;base1.Key.Equals&amp;#40;base2.Key&amp;#41;&amp;#41;&lt;br /&gt;&lt;br /&gt;This second statement works fine in all cases.  The reason for this has to do with the fact that the &amp;#61;&amp;#61; and &amp;#33;&amp;#61; operator overloads are not virtual whereas the Equals method is virtual.  So, what happens in the first statement is that the &amp;#33;&amp;#61; operator overload for the System.Object class is called and not the overload defined in the Guid class, since the Key property is declared as type object.  This causes a reference comparison and not a value comparison.  A value comparison is what is needed for this operator overload to work as needed.  The second statement will cause the Equals method of the Guid struct to be called and not the one defined for the System.Object class, since it is virtual, and the correct value comparison between the two  Guids is done, instead of a reference comparison.&lt;br /&gt;&lt;br /&gt;Here is a unit test that demonstrates the issue&amp;#58;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        public void EntitiesAreEqualIfDifferentEntityAndKeyObjectsButSameKeyValue&amp;#40;&amp;#41;&lt;br /&gt;&lt;br /&gt;        &amp;#123;&lt;br /&gt;&lt;br /&gt;            EntityBase entity1 &amp;#61; new EntityBase&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Guid id2 &amp;#61; new Guid&amp;#40;entity1.Key.ToString&amp;#40;&amp;#41;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            EntityBase entity2 &amp;#61; new EntityBase&amp;#40;id2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.AreEqual&amp;#40;entity1.Key, entity2.Key&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.AreEqual&amp;#40;entity1, entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsTrue&amp;#40;entity1.Equals&amp;#40;entity2&amp;#41;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsTrue&amp;#40;entity1 &amp;#61;&amp;#61; entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsFalse&amp;#40;entity1 &amp;#33;&amp;#61; entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;This unit test will fail on the second Assert.  When I change the EntityBase &amp;#61;&amp;#61; operator overload method with the new statement above, this unit test passes.&lt;br /&gt;Comments: Resolved with changeset 60701.</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 05:35:32 GMT</pubDate><guid isPermaLink="false">Closed Issue: Entity equality does not work in all cases [20736] 20110512053532A</guid></item><item><title>Created Issue: Entity equality does not work in all cases [20736]</title><link>http://dddpds.codeplex.com/workitem/20736</link><description>Hi Tim,&lt;br /&gt;&lt;br /&gt;I have come across a very subtle bug in the EntityBase &amp;#61;&amp;#61; operator overload method in the following statement&amp;#58;&lt;br /&gt;&lt;br /&gt;if &amp;#40;base1.Key &amp;#33;&amp;#61; base2.Key&amp;#41;&lt;br /&gt;&lt;br /&gt;This does not work if the base1.Key and base2.Key properties don&amp;#39;t reference the same Guid object, but have the same value.  The statement does work if both Key properties reference the same Guid object.  The fix for this bug is to replace the statement with this one&amp;#58;&lt;br /&gt;&lt;br /&gt;if &amp;#40;base1.Key.Equals&amp;#40;base2.Key&amp;#41;&amp;#41;&lt;br /&gt;&lt;br /&gt;This second statement works fine in all cases.  The reason for this has to do with the fact that the &amp;#61;&amp;#61; and &amp;#33;&amp;#61; operator overloads are not virtual whereas the Equals method is virtual.  So, what happens in the first statement is that the &amp;#33;&amp;#61; operator overload for the System.Object class is called and not the overload defined in the Guid class, since the Key property is declared as type object.  This causes a reference comparison and not a value comparison.  A value comparison is what is needed for this operator overload to work as needed.  The second statement will cause the Equals method of the Guid struct to be called and not the one defined for the System.Object class, since it is virtual, and the correct value comparison between the two  Guids is done, instead of a reference comparison.&lt;br /&gt;&lt;br /&gt;Here is a unit test that demonstrates the issue&amp;#58;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        public void EntitiesAreEqualIfDifferentEntityAndKeyObjectsButSameKeyValue&amp;#40;&amp;#41;&lt;br /&gt;&lt;br /&gt;        &amp;#123;&lt;br /&gt;&lt;br /&gt;            EntityBase entity1 &amp;#61; new EntityBase&amp;#40;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Guid id2 &amp;#61; new Guid&amp;#40;entity1.Key.ToString&amp;#40;&amp;#41;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            EntityBase entity2 &amp;#61; new EntityBase&amp;#40;id2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.AreEqual&amp;#40;entity1.Key, entity2.Key&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.AreEqual&amp;#40;entity1, entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsTrue&amp;#40;entity1.Equals&amp;#40;entity2&amp;#41;&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsTrue&amp;#40;entity1 &amp;#61;&amp;#61; entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;            Assert.IsFalse&amp;#40;entity1 &amp;#33;&amp;#61; entity2&amp;#41;&amp;#59;&lt;br /&gt;&lt;br /&gt;        &amp;#125;&lt;br /&gt;&lt;br /&gt;This unit test will fail on the second Assert.  When I change the EntityBase &amp;#61;&amp;#61; operator overload method with the new statement above, this unit test passes.&lt;br /&gt;</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 05:17:08 GMT</pubDate><guid isPermaLink="false">Created Issue: Entity equality does not work in all cases [20736] 20110512051708A</guid></item><item><title>Closed Feature: Update code base to use Entity Framework [10966]</title><link>http://dddpds.codeplex.com/workitem/10966</link><description>I would like to see EF being incorporated into the code.&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;Rad&lt;br /&gt;Comments: &lt;p&gt;I have decided not to implement this feature.&lt;/p&gt;</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 05:13:48 GMT</pubDate><guid isPermaLink="false">Closed Feature: Update code base to use Entity Framework [10966] 20110512051348A</guid></item><item><title>Commented Feature: Update code base to use Entity Framework [10966]</title><link>http://dddpds.codeplex.com/workitem/10966</link><description>I would like to see EF being incorporated into the code.&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;Rad&lt;br /&gt;Comments: ** Comment from web user: tmccart1 ** &lt;p&gt;Ideally, EF would only need to be implemented in the respositories, but due to its current design, it would also end up changing some of the Entity classes.&lt;/p&gt;</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 05:13:21 GMT</pubDate><guid isPermaLink="false">Commented Feature: Update code base to use Entity Framework [10966] 20110512051321A</guid></item><item><title>Closed Issue: Correction to ToClientMembershipUser [11416]</title><link>http://dddpds.codeplex.com/workitem/11416</link><description>Picked up a mistaking in the Converter.ToClientMembershipUser&amp;#40;&amp;#41; method on line 1043 &amp;#40;as per changeset 18409&amp;#41;.&lt;br /&gt;The &amp;#34;if&amp;#34; test should be a null check against the &amp;#34;contract&amp;#34; parameter, and not the &amp;#34;user&amp;#34; local variable.&lt;br /&gt;&lt;br /&gt;Enjoying the book&amp;#33;&lt;br /&gt;Thanks&lt;br /&gt;Comments: Resolved with changeset 60700.</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 05:09:03 GMT</pubDate><guid isPermaLink="false">Closed Issue: Correction to ToClientMembershipUser [11416] 20110512050903A</guid></item><item><title>Commented Issue: Update code base to use Entity Framework [10966]</title><link>http://dddpds.codeplex.com/workitem/10966</link><description>I would like to see EF being incorporated into the code.&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;Rad&lt;br /&gt;Comments: ** Comment from web user: tmccart1 ** &lt;p&gt;I personally do not like EF and think that it adds too much baggage to the classes, although the latest version of EF is getting better with code-first design.&lt;/p&gt;</description><author>tmccart1</author><pubDate>Thu, 12 May 2011 05:01:41 GMT</pubDate><guid isPermaLink="false">Commented Issue: Update code base to use Entity Framework [10966] 20110512050141A</guid></item><item><title>Closed Issue: gather all reusable code of this sample into a single project... [13220]</title><link>http://dddpds.codeplex.com/workitem/13220</link><description>Great work and Great book. It would be even greater if you gather all reusable assets into a single project&lt;br /&gt;Comments: &lt;p&gt;This is done now...all code is .NET 4.0 and no more external references to the Xceed data grid.&lt;/p&gt;</description><author>tmccart1</author><pubDate>Mon, 07 Feb 2011 22:56:16 GMT</pubDate><guid isPermaLink="false">Closed Issue: gather all reusable code of this sample into a single project... [13220] 20110207105616P</guid></item><item><title>Commented Issue: Update code base to use Entity Framework [10966]</title><link>http://dddpds.codeplex.com/WorkItem/View.aspx?WorkItemId=10966</link><description>I would like to see EF being incorporated into the code.&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;Rad&lt;br /&gt;Comments: ** Comment from web user: MarioMajcica ** &lt;p&gt;Even I am interested on how to &amp;#34;fill in&amp;#34; EF&amp;#63;&lt;/p&gt;&lt;p&gt;Thanks&lt;/p&gt;</description><author>MarioMajcica</author><pubDate>Tue, 13 Oct 2009 09:47:11 GMT</pubDate><guid isPermaLink="false">Commented Issue: Update code base to use Entity Framework [10966] 20091013094711A</guid></item><item><title>Created Issue: gather all reusable code of this sample into a single project...</title><link>http://dddpds.codeplex.com/WorkItem/View.aspx?WorkItemId=13220</link><description>Great work and Great book. It would be even greater if you gather all reusable assets into a single project&lt;br /&gt;</description><author>cbakopanos</author><pubDate>Tue, 12 May 2009 20:39:37 GMT</pubDate><guid isPermaLink="false">Created Issue: gather all reusable code of this sample into a single project... 20090512083937P</guid></item><item><title>Created Issue: Correction to ToClientMembershipUser</title><link>http://www.codeplex.com/dddpds/WorkItem/View.aspx?WorkItemId=11416</link><description>Picked up a mistaking in the Converter.ToClientMembershipUser&amp;#40;&amp;#41; method on line 1043 &amp;#40;as per changeset 18409&amp;#41;.&lt;br /&gt;The &amp;#34;if&amp;#34; test should be a null check against the &amp;#34;contract&amp;#34; parameter, and not the &amp;#34;user&amp;#34; local variable.&lt;br /&gt;&lt;br /&gt;Enjoying the book&amp;#33;&lt;br /&gt;Thanks&lt;br /&gt;</description><author>chrisstefano</author><pubDate>Mon, 06 Oct 2008 22:10:33 GMT</pubDate><guid isPermaLink="false">Created Issue: Correction to ToClientMembershipUser 20081006101033P</guid></item><item><title>Created Issue: design and implement a entity key class</title><link>http://www.codeplex.com/dddpds/WorkItem/View.aspx?WorkItemId=10994</link><description>This would replace the current key property in the Entity base class, and be responsible for maintaining the value that defines the Entity&amp;#39;s identity in a type safe way &amp;#40;types should include guid and long&amp;#41; that is easily accessible to sql strings without requiring casting.&lt;br /&gt;</description><author>BerrylHesh</author><pubDate>Wed, 13 Aug 2008 02:35:16 GMT</pubDate><guid isPermaLink="false">Created Issue: design and implement a entity key class 20080813023516A</guid></item><item><title>Created Issue: Update code base to use Entity Framework</title><link>http://www.codeplex.com/dddpds/WorkItem/View.aspx?WorkItemId=10966</link><description>I would like to see EF being incorporated into the code.&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;Rad&lt;br /&gt;</description><author>raca</author><pubDate>Sun, 10 Aug 2008 20:04:02 GMT</pubDate><guid isPermaLink="false">Created Issue: Update code base to use Entity Framework 20080810080402P</guid></item><item><title>Created Issue: Update code base to use Enterprise Library 4.0</title><link>http://www.codeplex.com/dddpds/WorkItem/View.aspx?WorkItemId=10389</link><description>The current code base is using EntLib 3.0 and needs to be upgraded to 4.0.&lt;br /&gt;</description><author>tmccart1</author><pubDate>Tue, 24 Jun 2008 21:51:39 GMT</pubDate><guid isPermaLink="false">Created Issue: Update code base to use Enterprise Library 4.0 20080624095139P</guid></item><item><title>CLOSED ISSUE: Sanity check in EntityBase.GetHashCode()</title><link>http://www.codeplex.com/dddpds/WorkItem/View.aspx?WorkItemId=10119</link><description>Hi,&lt;br /&gt;&lt;br /&gt; You should really check for key &amp;#33;&amp;#61; null before invoking its GetHashCode&amp;#40;&amp;#41;.&lt;br /&gt;&lt;br /&gt; Regards,&lt;br /&gt;&lt;br /&gt; Lars Wilhelmsen&lt;br /&gt;</description><author>tmccart1</author><pubDate>Mon, 05 May 2008 17:06:33 GMT</pubDate><guid isPermaLink="false">CLOSED ISSUE: Sanity check in EntityBase.GetHashCode() 20080505050633P</guid></item><item><title>CREATED ISSUE: [Suggestion] Use the Converter&lt;TInput, TOutput&gt; delegate for entity translators</title><link>http://www.codeplex.com/dddpds/WorkItem/View.aspx?WorkItemId=10120</link><description>Hi,&lt;br /&gt;&lt;br /&gt; In SmartCA.DataContracts.Helpers.Converter.cs static TOXxx&amp;#40;...&amp;#41; methods are used to translate the entities to data contract instances.&lt;br /&gt;&lt;br /&gt; I suggest that you use the Converter&amp;#60;TInput, TOutput&amp;#62; delegate instead, since this is also very useful with the new extension method ConvertAll&amp;#40;&amp;#41; on System.Array.&lt;br /&gt;&lt;br /&gt; Regards&lt;br /&gt;&lt;br /&gt; Lars Wilhelmsen&lt;br /&gt;</description><author>larsw</author><pubDate>Sun, 04 May 2008 12:58:30 GMT</pubDate><guid isPermaLink="false">CREATED ISSUE: [Suggestion] Use the Converter&lt;TInput, TOutput&gt; delegate for entity translators 20080504125830P</guid></item><item><title>CREATED ISSUE: Sanity check in EntityBase.GetHashCode()</title><link>http://www.codeplex.com/dddpds/WorkItem/View.aspx?WorkItemId=10119</link><description>Hi,&lt;br /&gt;&lt;br /&gt; You should really check for key &amp;#33;&amp;#61; null before invoking its GetHashCode&amp;#40;&amp;#41;.&lt;br /&gt;&lt;br /&gt; Regards,&lt;br /&gt;&lt;br /&gt; Lars Wilhelmsen&lt;br /&gt;</description><author>larsw</author><pubDate>Sun, 04 May 2008 06:40:58 GMT</pubDate><guid isPermaLink="false">CREATED ISSUE: Sanity check in EntityBase.GetHashCode() 20080504064058A</guid></item><item><title>CLOSED ISSUE: Source Zip  14557 and 14530 error on extract</title><link>http://www.codeplex.com/dddpds/WorkItem/View.aspx?WorkItemId=9082</link><description>Tim, I tried to extract changesets 14557 and 14530.  With both I ran into an issue that says &amp;#34;There is already a folder with the same name as the filen name you specified.  SmartCA, file type folder.   I you Open the zip there is a SmartCA folder and second SmartCA file &amp;#47; folder.&lt;br /&gt;&lt;br /&gt;The folders that do get extracted look like they have the entire project.  So I am not sure what the second &amp;#34;folder&amp;#34; contains.&lt;br /&gt;&lt;br /&gt;Thanks&lt;br /&gt;ScooterDude&lt;br /&gt;</description><author>tmccart1</author><pubDate>Thu, 06 Mar 2008 23:38:42 GMT</pubDate><guid isPermaLink="false">CLOSED ISSUE: Source Zip  14557 and 14530 error on extract 20080306113842P</guid></item></channel></rss>