Metamodel for sagas

This pull adds a saga metamodel that paves the way for many of the planned saga features.

The main thing with this pull is that mapped properties are now automatically unique. The inmemory persister is already modified to support this:

https://github.com/Particular/NServiceBus/pull/2416/files#diff-17e8d72500928dcb599bc890835658eeR80

Since the other persisters needs to be modified to look at the metamodel we need to wait until v6 before we can fully complete this. (I'll raise separate issues for those modifications)

I've also killed off  the brittle `with_sagas` tests that are now either covered by real unit tests or acceptance tests.

Next step after this pull is to fix:

https://github.com/Particular/NServiceBus/issues/2080
https://github.com/Particular/NServiceBus/issues/2442
https://github.com/Particular/NServiceBus/issues/313
https://github.com/Particular/NServiceBus/issues/313

which all should be quite a bit easier after this.

I'll rebase after the review is complete
+1 for the correlation property (since we need that for unique/non-unique
flags potentially)

-1 for saganame, don't see a use case for it?

On Wed, Oct 22, 2014 at 2:25 PM, Szymon Pobiega <notifications@github.com>
wrote:

> In src/NServiceBus.Core/Sagas/SagaMetadata.cs:
>
> > +            {
> > +                sagaFinders[finder.MessageType] = finder;
> > +            }
> > +
> > +        }
> > +
> > +
> > +        /// <summary>
> > +        /// Properties this saga is correlated on
> > +        /// </summary>
> > +        public IEnumerable<string> CorrelationProperties;
> > +
> > +        /// <summary>
> > +        /// The name of the saga
> > +        /// </summary>
> > +        public string Name;
>
> Same as above, shouldn't we have have SagaName 'value object'?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/Particular/NServiceBus/pull/2416/files#r19209688>.
>