<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Wilson ORMapper Forums : Chat &amp; Share</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=rss&amp;id=3&amp;key=5ZSBT9nL6sAEkb5zrjqD0Q%3d%3d</link><description>Wilson ORMapper Forums : Chat &amp; Share</description><item><title>Simple web example?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2605&amp;key=7zwioWTqcHRgsRHTFkQNvQ%3d%3d&amp;post=7776</link><pubDate>Thu, 20 Dec 2007 02:44:03 GMT</pubDate><description>&lt;P&gt;Hi all, looking for a simple web example that might get me going in the right direction.&amp;nbsp; The WebPortal is a little out of my league.&amp;nbsp; Just looking to see how to best initialize the manager and get back a list of objects and display in a grid on a web page.&lt;/P&gt;
&lt;P&gt;Thanks for you patience&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7649</link><pubDate>Wed, 27 Jun 2007 20:47:52 GMT</pubDate><description>&lt;P&gt;Thanks, hero without a name :)&lt;/P&gt;
&lt;P&gt;I had exactly the same problem (and pinned down the cause to the same function) and your performance fix improved running time by about 20x in&amp;nbsp;a worst case scenario a had here.&lt;/P&gt;
&lt;P&gt;The code i have would normally only retrieve a handful records and performance was not a problem in that case, but it had to be prepared to still perform decently when there were several thousands. The original version of Add had a O(n*n) behaviour.&lt;/P&gt;
&lt;P&gt;Gunter&lt;/P&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7589</link><pubDate>Sat, 21 Apr 2007 06:25:56 GMT</pubDate><description>&lt;P&gt;Regarding the IObjectHelper stuff - if you look at the IL the compiler generates for the switch statement you'll see that the compiler emits code to load a static Dictionary&amp;lt;string, int&amp;gt; with the field names and a jump table index. When evaluating the switch arg, it looks up the string in the dictionary and jumps to the label indexed by the jump table index. So adding your own hashtable would simply replicate the code the compiler already generates for you. &lt;BR&gt;&lt;BR&gt;I also found when profiling that when loading new rows from the database, the code calls DateTime.Now at least twice for each field in every row loaded. Since it was a non-trivial chunk of the time, I changed &lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;return &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Instance&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;.SetField(this.EntityObject, this.instance.Target, member, value, this.context.Provider);&lt;BR&gt;&lt;/FONT&gt;to&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;return &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;Instance&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;.SetField(this.entity, this.instance.Target, member, value, this.context.Provider);&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;in this SetField overload:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;private&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt; SetField(&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;EntityMap&lt;/FONT&gt;&lt;FONT size=2&gt; entityMap, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt; member, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt; value) &lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;The other big hitter when running the profiler seemed to be QueryHelper.ChangeType. Since IObjectHelper necessarily has to coerce types anyway, it's superfluous if you have an IObjectHelper implementation. I didn't remove it, but the data suggested it would be the next thing to work on from a performance point of view. &lt;/P&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7588</link><pubDate>Fri, 20 Apr 2007 17:24:52 GMT</pubDate><description>&lt;P&gt;For the time being, I have replaced the above code with this optimized version, which basically codes in the assumption that the newly added item will always be the last index.&amp;nbsp; Even with the additional sanity check afterwards, this now retrieves a steady 2000-2200 objects/second with no perceptible roll-off (eliminating the test adds maybe 100 objects/second). I don't know if you want to use this or not, but I thought I would offer it.&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; Add(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt; objectKey, T entityObject) {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;this&lt;/FONT&gt;&lt;FONT size=2&gt;.Items.Add(entityObject);&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; index = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;this&lt;/FONT&gt;&lt;FONT size=2&gt;.Items.Count - 1;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt; (!entityObject.Equals(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;this&lt;/FONT&gt;&lt;FONT size=2&gt;.Items[index]))&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;ORMapperException&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;"ObjectSet: Optimized objectkey index retrieval assertion failure"&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;this&lt;/FONT&gt;&lt;FONT size=2&gt;.keyValues.Add(objectKey, index);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7554</link><pubDate>Sun, 08 Apr 2007 21:17:55 GMT</pubDate><description>&lt;P&gt;OK, I found it. This really isn't a completely fair comparison after all, since ObjectSet has basically O(1) access by the key value and does does an expensive lookup to determine the index of the object at load time.&lt;/P&gt;
&lt;P&gt;This line in ObjectSet_T.cs is the killer:&lt;/P&gt;
&lt;P&gt;int index = this.Items.IndexOf(entityObject);&lt;/P&gt;
&lt;P&gt;If I comment this line out, then I get object retrieval rates of 2000-2500/second, that don't decline with result set size. This is better. &lt;/P&gt;
&lt;P&gt;I'll also try an ObjectReader. &lt;BR&gt;&lt;/P&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7557</link><pubDate>Fri, 06 Apr 2007 10:57:54 GMT</pubDate><description>&lt;P&gt;I don't why my previous post didn't show up about my having identified the difference, but I accounted for the performance observationsn in some addition tests yesterday:&lt;/P&gt;
&lt;P&gt;1. My test with the Wilson ORMapper was using an ObjectSet, a richer indexed collection which is slightly more expensive to populate, so it wasn't a fair (e.g. "apples to apples") test.&lt;/P&gt;
&lt;P&gt;2. Using a ObjectReader vs. NHibernate with it's reflection optimizer turned off, the Wilson ORMapper is actually slightly faster (within 10%, though). &lt;/P&gt;
&lt;P&gt;3. NHibernate gets a 300% performance improvement with the optimizer on versus having it turned off, in case you were interested how much difference using the emitter makes.&lt;/P&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7556</link><pubDate>Fri, 06 Apr 2007 10:13:12 GMT</pubDate><description>&lt;P&gt;Here's what I know:&lt;/P&gt;
&lt;P&gt;1.&amp;nbsp; My ORMapper was definitely optimized for small to medium resultsets intentionally.&amp;nbsp; I'm a firm believer that you should use database paging and users should only see small sets.&amp;nbsp; The cases where you must have more are typically for reports, when DataSets make more sense and will outperform objects anyhow (even NHibernate I would bet from my own tests), or you should be doing the processing on the server if its not reporting.&lt;/P&gt;
&lt;P&gt;2.&amp;nbsp; My ORMapper does not have any of the .NET v2.0 light-weight reflection stuff in it since I've kept the same codebase so far for v1.1 and v2.0, with the except of generics and nullables.&amp;nbsp; NHibernate probably has added that, which would make a difference, and I know that the results you're seeing were typical of all O/R Mappers in v1.1, including NHibernate, which was again part of my reasoning to optimize towards smaller sets.&lt;/P&gt;
&lt;P&gt;Personally, I seldom even both with the IObjectHelper interface at all.&amp;nbsp; I added it since it makes performance tests better, but in the real world with smaller and more realistic sets of data it just doesn't impact performance the way it can in large theoretical tests -- and my mapper is all about what works best in those real world situations.&lt;/P&gt;
&lt;P&gt;Thanks, Paul Wilson&lt;/P&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7552</link><pubDate>Thu, 05 Apr 2007 15:43:02 GMT</pubDate><description>&lt;P&gt;Try returning an ObjectReader, just for curiosity's sake.&lt;/P&gt;
&lt;P&gt;Travis&lt;/P&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7551</link><pubDate>Thu, 05 Apr 2007 15:21:17 GMT</pubDate><description>&lt;P&gt;I just tried turning off auto-tracking, and it didn't make much difference. &lt;/P&gt;
&lt;P&gt;Performance goes down dramatically with result set size increase. I can retrieve almost 1500-1700 objects / second if I keep the result set size under&amp;nbsp;2000 objects, but it goes down steadily from there. 10,000 object can be retrieved in a little over 50 seconds (600/second), and down to 300/second for 40,000 rows. &lt;/P&gt;
&lt;P&gt;I wonder if there is some sort of O(n) list access going on. I'll wade in a bit deeper. &lt;/P&gt;</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7550</link><pubDate>Thu, 05 Apr 2007 15:04:50 GMT</pubDate><description>Good grief. Posting code didn't work very well -- sorry about that. Anyway, it boils down to an unsorted GetObjectSet(), with the number of rows limited in the query.</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7549</link><pubDate>Thu, 05 Apr 2007 15:02:41 GMT</pubDate><description>This from the last version of the Welter templates (which have recently been redone to use a different pattern).

Sorry about the reflection, but I'm basically trying to call the static "RetrievePage" method in the Welter templates for whichever object class I was testing, with a first row and number of rows. 


        private void buttonGo_Click(object sender, EventArgs e)
        {
            int i = comboBoxClasses.SelectedIndex;
            DataManager.ObjectSpace.ClearTracking();

           if (i &gt;= 0)
           {
               richTextBoxMessage.Text = "";
                string s = comboBoxClasses.Items[i] as string;
                string strFactoryTypeName = "&lt;build the object class name&gt;"

                System.Type aType = System.Type.GetType(strFactoryTypeName, false, true);

                if (aType != null)
                {
                    try
                    {
                        IList list;

                        int FirstRow, NumberOfRows;

                        if (!int.TryParse(textBoxFirstRow.Text, out FirstRow))
                            FirstRow = 0;

                        if (!int.TryParse(textBoxCount.Text, out NumberOfRows))
                            NumberOfRows = 1000;

                        DateTime start = DateTime.Now;
                        list = aType.InvokeMember("RetrievePage", BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, new object[] { FirstRow, NumberOfRows }) as IList;

                        if (list != null)
                        {
                            DateTime finish = DateTime.Now;
                            TimeSpan elapsed = finish - start;

                            textBoxElapsed.Text = String.Format("{0:F3}", (double)elapsed.TotalMilliseconds / 1000);
                            textBoxStartTime.Text = start.ToShortTimeString();
                            textBoxEndTime.Text = finish.ToShortTimeString();
                            textBoxRowsReturned.Text = list.Count.ToString();
                            textBoxRowsSecond.Text = string.Format("{0:F3}", ((double)list.Count * 1000) / elapsed.TotalMilliseconds).ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        richTextBoxMessage.Text = ex.Message;
                    }
                }
           }
       }

Here is the RetrievePage code, which appears to load an ObjectSet:

        public static Collection&lt;T&gt; RetrievePage(int startRowIndex, int maximumRows, string sortClause)
        {
            int pageIndex = (int)Math.Floor((double)(startRowIndex-1) / maximumRows) + 1;
            ObjectQuery&lt;T&gt; query = new ObjectQuery&lt;T&gt;(string.Empty, sortClause, maximumRows, pageIndex, true);
            ObjectSet&lt;T&gt; pageSet = RetrievePage(query, false);
            return pageSet;
        }</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7548</link><pubDate>Wed, 04 Apr 2007 15:54:17 GMT</pubDate><description>Interesting to say the least.&amp;nbsp; Can you post your retrieval code?&amp;nbsp; Are you returning an ObjectSet or an ObjectReader?&amp;nbsp; I have not used NHibernate, so I don’t know if it has equivalents.&amp;nbsp; However this has for sure sparked my interests.</description></item><item><title>Significant performance differences vs. NHibernate, thoughts?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2505&amp;key=JxfgN3hZhZJLkPkDnFvPKA%3d%3d&amp;post=7547</link><pubDate>Wed, 04 Apr 2007 14:48:23 GMT</pubDate><description>&lt;P&gt;So, I've been investigating WORM vs NHibernate and think either would work for us. I like (very much)&amp;nbsp;the simplicity of WORM (and find the complexity of NHibernate to be somewhat daunting), but NHibernate has somethings out of the box that I would have to modify WORM for (e.g. access to the mapping metadata that goes with an object). &lt;/P&gt;
&lt;P&gt;I have run into a *huge* performance difference that I cannot&amp;nbsp; readily account for, though. Retrieving a significant number of objects from a SQL Server database can be 20-30 times faster in NHibernate. I'm using the Welter templates&amp;nbsp;with WORM, and GenWise objects with NHibernate.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Accessing a modestly wide table&amp;nbsp;(40+ columns), NHibernate can retrieve 7000-8000 objects/second from a separate test SQL Server machine, returning 40,000 objects in about 5 seconds. The WORM+Welter combination takes over 2 minutes to retrieve the same object set, barely 300 objects/second. &amp;nbsp;With an Oracle database, the difference is less, but NHibernate is still 3 or more times faster, 800 objects/second versus WORM still being around 300. &lt;/P&gt;
&lt;P&gt;Of course, this isn't something you would generally actually have to do in production, but I was just trying to weigh whether the "bloat" of NHibernate was a performance detriment. Also, the performance of WORM improves dramatically if fewer objects are retrieved. Speeds of 1000-1500 objects/second are attainable when 5000 or fewer objects are retrieved. &lt;/P&gt;
&lt;P&gt;Note that this is not the database. The query is finished, and I can see the client CPU go to 100% while the result set is actually being loaded into the objects with both mappers. I also repeat the test several times with the same query to be sure that caching issues don't muddy the waters.&lt;/P&gt;
&lt;P&gt;Any thoughts? All I can come up with is that NHibernate generates lightweight property accessors while IObjectHelper (in the Welter templates) uses a big switch statement that string compares 1/2 the properties on average just to find a single property, property loading is O(n) in NHibernate versus O(n x m). Maybe I'll&amp;nbsp;try a hash table instead just to see if this makes a different in&amp;nbsp;my Welter object. I can also turn off the&amp;nbsp;optimizer in&amp;nbsp;NHibernate and see what difference that makes. &amp;nbsp;&lt;/P&gt;</description></item><item><title>Custom field support (end-user modifiable database schema)?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2492&amp;key=3uWcUrEhld2DIOrhHYGHJA%3d%3d&amp;post=7544</link><pubDate>Tue, 03 Apr 2007 02:34:47 GMT</pubDate><description>&lt;P&gt;I actually managed to implement this with only some minor modifications to WORM itself. &lt;/P&gt;
&lt;P&gt;I see your point about "objects", but in this case we are simply allowing user extensions to our objects that have no semantics within the application itself, but the users find helpful for reporting or documentation purposes, and in some cases writing custom interfaces that actually do add behaviors&amp;nbsp;to the app. &lt;/P&gt;
&lt;P&gt;So, our application only cares about the "fixed" part (e.g. the explicitly mapped properties) that has all the benefits you describe, while the user's baggage is carried along in the variable container portion. It's a legacy feature our users like that I'm trying to carry forward, so I can't very well eliminate it after we've supported it for many years.&lt;/P&gt;
&lt;P&gt;Basically, I just assumed a string binding type for now&amp;nbsp;(since it's the user's data anyway and we don't manipulate it other than to bind it for data entry), and just bypassed the one part where you used reflection to determine the field type. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Active Development?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2435&amp;key=3wh03IldBQlLFbxEB9wpKg%3d%3d&amp;post=7524</link><pubDate>Sun, 25 Mar 2007 22:15:12 GMT</pubDate><description>&lt;P&gt;I have planned to add a few more features, some of which I already have coded mostly, like ability to read in transactions, but I've been delayed repeatedly.&amp;nbsp; That said, I also do believe the product is relatively complete, meaning that it will meet 90% or more of the needs that are out there, while not making it hard to do the remaining in procs or other ways.&lt;/P&gt;
&lt;P&gt;Thanks, Paul Wilson&lt;/P&gt;</description></item><item><title>Active Development?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2435&amp;key=3wh03IldBQlLFbxEB9wpKg%3d%3d&amp;post=7509</link><pubDate>Sun, 25 Mar 2007 22:10:55 GMT</pubDate><description>&lt;DIV id=result_box dir=ltr&gt;Hello&amp;nbsp;Paul, &lt;/DIV&gt;
&lt;DIV dir=ltr&gt;The product will be discontinued or the development is stopped momentarily? &lt;/DIV&gt;
&lt;DIV dir=ltr&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV dir=ltr&gt;Regards,&lt;/DIV&gt;
&lt;DIV dir=ltr&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV dir=ltr&gt;Rogério &lt;/DIV&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7516</link><pubDate>Wed, 21 Mar 2007 16:35:36 GMT</pubDate><description>&lt;font face="Verdana" size="2"&gt;There is one &lt;i&gt;main&lt;/i&gt; caveat to my example, which is that there is the hopefully obvious dependency between the business logic which contains the OPath statement and the mock class which also contains it. Obviously you would want to ensure that not only to those match to ensure fidelity between the two, but that if they change you change the test data you provide as well.&lt;br&gt;&lt;br&gt;If you are writing unit tests to check your business logic, you really don't care so much about how you got the data, per se, but if it meets your code's expectations so that you can test your processess which utilize the data.&lt;br&gt;&lt;br&gt;Anyway, I am sure others might disagree, but I personally don't care to test things that are expected to work. That said, it sure would be nice if all of the .NET framework, and third-party libraries as well, included unit tests when shipped - then you would feel better about building entire apps on top of code that you know works, as indicated by the passing tests.&lt;br&gt;&lt;br&gt;I am rambling now and have a splitting headache, so I think I am done. :P&lt;br&gt;&lt;/font&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7515</link><pubDate>Wed, 21 Mar 2007 13:16:58 GMT</pubDate><description>&lt;P&gt;OK, I see now.&amp;nbsp;&amp;nbsp; I guess I didn't really understand the mocking principle before.&amp;nbsp; Thank you very much for that example - it was very enlightening.&lt;/P&gt;
&lt;P&gt;-David&lt;/P&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7514</link><pubDate>Tue, 20 Mar 2007 16:22:12 GMT</pubDate><description>Well, I don't care to unit test the capabilities of OPath - if I were to write a mock persistence manager that dealt with OPath queries, I would just hard-code expected subsets of the data rather than worry about writing something that parsed OPath to give me what I wanted.&lt;br&gt;&lt;br&gt;For example, if the code I wanted to test looked like this (contrived pseudocode):&lt;br&gt;&lt;br&gt;&lt;font face="Courier New" size="2"&gt;StudentCollection sc = StudentManager.GetAll("FirstName == 'Joe' &amp;amp;&amp;amp; GPA &amp;gt; 3");&lt;br&gt;if(sc.Count &amp;gt; 0) &lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Some 'Joe' has a GPA higher than 3.0!");&lt;br&gt;}&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;In my mock persistence manager, which is injected at runtime for unit testing, I might have something like:&lt;br&gt;&lt;br&gt;&lt;font face="Courier New" size="2"&gt;public StudentCollection GetAll(string opath)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StudentCollection sc = new StudentCollection();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch(opath)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  case "FirstName == 'John' &amp;amp;&amp;amp; GPA &amp;gt; 3":&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  sc.Add( new student object that matches the criteria );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  sc.Add( new student object that matches the criteria );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  sc.Add( new student object that matches the criteria );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  break;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  case "some other opath":&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  sc.Add( new student object that matches the criteria );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  sc.Add( new student object that matches the criteria );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &amp;nbsp;&amp;nbsp;  break;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  etc.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sc;&lt;br&gt;}&lt;/font&gt;&lt;br&gt;&lt;br&gt;Hope that makes sense. Sure, this isn't perfect, and maybe a parser for OPath that works on in-memory collections would be nice, but who has time for that? Besides, isn't LINQ going to provide that for us? Sadly, I don't know enough about LINQ to say authoritatively, but I want to say that I think that is part of it.&lt;br&gt;&lt;br&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7506</link><pubDate>Thu, 15 Mar 2007 02:22:12 GMT</pubDate><description>&lt;P&gt;Cool, that's the sort of thing I'm after.&amp;nbsp; I actually have a similiar sort of framework where I define interfaces for a Repository and a Unit Of Work.&amp;nbsp; I then create a worm implementation of those classes in a separate project, and use reflection to "dependency inject" the implementation that is specified in the config file (either the worm implementation or a dummy, in-memory implementation for testing.).&amp;nbsp; All works well, up to a point.&amp;nbsp; For basic CRUD stuff, the in-memory implementation works great in the test scenario.&amp;nbsp; But when it comes to querying, it gets complex.&amp;nbsp; &lt;STRONG&gt;It seems I would need an interpreter to make the opath queries find matching objects in an in-memory list&lt;/STRONG&gt;.&amp;nbsp; I see where you have an ISelectionCriteria interface which looks like you might have this handled, but I haven't looked at it closely.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;David Martines&lt;/P&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7505</link><pubDate>Thu, 15 Mar 2007 02:22:12 GMT</pubDate><description>&lt;P&gt;Cool, that's the sort of thing I'm after.&amp;nbsp; I actually have a similiar sort of framework where I define interfaces for a Repository and a Unit Of Work.&amp;nbsp; I then create a worm implementation of those classes in a separate project, and use reflection to "dependency inject" the implementation that is specified in the config file (either the worm implementation or a dummy, in-memory implementation for testing.).&amp;nbsp; All works well, up to a point.&amp;nbsp; For basic CRUD stuff, the in-memory implementation works great in the test scenario.&amp;nbsp; But when it comes to querying, it gets complex.&amp;nbsp; &lt;STRONG&gt;It seems I would need an interpreter to make the opath queries find matching objects in an in-memory list&lt;/STRONG&gt;.&amp;nbsp; I see where you have an ISelectionCriteria interface which looks like you might have this handled, but I haven't looked at it closely.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;David Martines&lt;/P&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7502</link><pubDate>Wed, 14 Mar 2007 06:36:09 GMT</pubDate><description>&lt;P&gt;That's why I use the &lt;A href="http://www.sapientdevelopment.com/WORMFramework.aspx"&gt;code generation framework I designed for WORM &lt;/A&gt;- I use the &lt;A href="http://martinfowler.com/articles/injection.html#UsingAServiceLocator"&gt;Service Locator&lt;/A&gt; design pattern for doing dependency injection, and it allows me to abstract the persistence layer in such a way that the business logic doesn't know which &lt;EM&gt;actual&lt;/EM&gt; persistence mechanism is being used, it just calls out to a facade. It works quite well, actually.&lt;/P&gt;
&lt;P&gt;The nice thing about it is, if I don't have any unit tests, it doesn't matter - but I can always add them later. Ideally, I would use TDD to get things done, but sometimes putting in tests later is all you can do, unfortunately.&lt;/P&gt;
&lt;P&gt;Jason Bunting&lt;/P&gt;</description></item><item><title>Custom field support (end-user modifiable database schema)?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2492&amp;key=3uWcUrEhld2DIOrhHYGHJA%3d%3d&amp;post=7499</link><pubDate>Tue, 13 Mar 2007 19:51:30 GMT</pubDate><description>&lt;P&gt;You are correct that it is not supported.&amp;nbsp; You can almost get there by using the IObjectHelper since it would at first glance give you the flexibility to have the values live in any type of container you wanted.&amp;nbsp; But that isn't quite going to work because during the initialization of the ObjectSpace the mapper does reflect on the actual member to determine the data type since that is not done in the mapping itself (even though some of the CodeSmith templates have done so for their own purpose).&lt;/P&gt;
&lt;P&gt;Would it be hard to change this?&amp;nbsp; Probably not since the IObjectHelper would get you most of the way there.&amp;nbsp; You'd have to stop the initialization reflection, and to do that you would probably have to put the data type in the mapping file (but you might already be doing that anyhow if using CodeSmith) and then read it in during initialization instead.&lt;/P&gt;
&lt;P&gt;But my question is why would you want to do this in the first place?&amp;nbsp; The whole point of a O/R Mapper is to have *Objects*, which usually means strongly typed properties that you can add business logic to and which help with intellisense and compile-time checks.&amp;nbsp; Changing to a variable container loses those benefits and would basically amount to the same thing as using a DataSet.&amp;nbsp; And if that's what you want then there are tools out there that can help you map to DataSets that would probably be a better fit for you.&lt;/P&gt;
&lt;P&gt;Thanks, Paul Wilson&lt;/P&gt;</description></item><item><title>Custom field support (end-user modifiable database schema)?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2492&amp;key=3uWcUrEhld2DIOrhHYGHJA%3d%3d&amp;post=7498</link><pubDate>Tue, 13 Mar 2007 15:59:23 GMT</pubDate><description>&lt;P&gt;Has anyone used WORM in a situation where the user was allowed to modify the database schema (e.g. add their own fields to an application table?). &lt;/P&gt;
&lt;P&gt;I've waded deep enough into the WORM source code to have the impression that it won't do this out of the box, but I could be wrong. It seems like framework very much wants an individual field or property to be associated with each mapped database column, and mapping to variable container of some sort (e.g. a collection of custom columns indexed by the the column name) would require some possibly significant modifications (but I'm still experimenting). I was just wondering if someone had done this before.&lt;/P&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7496</link><pubDate>Mon, 12 Mar 2007 16:11:07 GMT</pubDate><description>&lt;P&gt;Sorry for the vagueness.&amp;nbsp; I am referring to situations where domain model classes rely on infrastructure such as the ormapper.&amp;nbsp; When&amp;nbsp;I'm testing domain logic (not persistence logic) I want the unit tests to be able run without needing to connect to the database.&lt;/P&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7494</link><pubDate>Sat, 10 Mar 2007 00:15:39 GMT</pubDate><description>&lt;P&gt;What approaches? Sorry, your question seems a little vague - I use NUnit to do testing of my domain model classes. What else do you want to know? Maybe some specifics would help.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Unit Testing a Domain Model</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2488&amp;key=vQUTxjeENJuHk2kOkZ3hgA%3d%3d&amp;post=7492</link><pubDate>Fri, 09 Mar 2007 15:59:25 GMT</pubDate><description>&lt;P&gt;Hi everyone, &lt;/P&gt;
&lt;P&gt;Just wondering what approaches you have used in Unit Testing your domain model classes, when using an o/r mapper like the WilsonORMapper.&lt;/P&gt;
&lt;P&gt;Thanks,&lt;/P&gt;
&lt;P&gt;David Martines&lt;/P&gt;</description></item><item><title>Concurrency in a web application</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2481&amp;key=NzbUh5q%2b6Xhy41YvfZ1Plg%3d%3d&amp;post=7479</link><pubDate>Tue, 27 Feb 2007 17:07:41 GMT</pubDate><description>&lt;P&gt;Hi, &lt;/P&gt;
&lt;P&gt;I added an article&amp;nbsp;on optimistic concurrency in a web application to the Wiki.&amp;nbsp; I hope it can be of some help.&lt;/P&gt;
&lt;P&gt;- David Martines&lt;/P&gt;</description></item><item><title>LINQ</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2469&amp;key=Y4pqSkFByZd22ZaDqucPoQ%3d%3d&amp;post=7459</link><pubDate>Thu, 08 Feb 2007 21:01:37 GMT</pubDate><description>&lt;P&gt;Hi Travis:&lt;/P&gt;
&lt;P&gt;Its certainly going to be possible for my mapper or any other to integrate with LINQ in the sense that we can use its query syntax.&amp;nbsp; As for whether or not one of the MS LINQ O/RMs can replace my ORMapper, its still a little too early for me to honestly reply.&amp;nbsp; The last usable CTP of LINQ for SQL was May 2006, and it was very good -- much better than I was expecting.&amp;nbsp; But there were also some things missing, so I'm eagerly waiting for the next CTP that promises to integrate LINQ for SQL again.&amp;nbsp; As for the LINQ for Entities case, I believe its a very different beast so far -- and by that I don't necessarily mean terrible, as I suspect it depends on your needs.&amp;nbsp; But for me, and most likely the users of my ORMapper, its LINQ to SQL that is the comparable O/RM -- i.e. its simple and enough for most cases.&lt;/P&gt;
&lt;P&gt;Thanks, Paul Wilson&lt;/P&gt;</description></item><item><title>LINQ</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2469&amp;key=Y4pqSkFByZd22ZaDqucPoQ%3d%3d&amp;post=7457</link><pubDate>Thu, 08 Feb 2007 17:32:38 GMT</pubDate><description>&lt;P&gt;Paul-&lt;/P&gt;
&lt;P&gt;Have you had a chance to&amp;nbsp;play with&amp;nbsp;LINQ for Entities and/or LINQ for SQL?&amp;nbsp; What is your opinion if you have?&amp;nbsp; With this stuff replace WORM?&amp;nbsp;&amp;nbsp;Can WORM be built to utilize this new tech?&lt;/P&gt;
&lt;P&gt;Travis&amp;nbsp; &lt;/P&gt;</description></item><item><title>Active Development?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2435&amp;key=3wh03IldBQlLFbxEB9wpKg%3d%3d&amp;post=7432</link><pubDate>Wed, 31 Jan 2007 19:44:02 GMT</pubDate><description>Notwithstanding the fact that activity on this project seems to have stagnated a bit, it is definitely worth the investment in my opinion. I have used WORM for a couple years now and love it and so do most people that I expose to it. Most of the issues you may run into with it are most likely already covered in the forum here, and searching it will usually yield answers to any questions you have about it.&lt;br&gt;&lt;br&gt;As for LLBLGen, I am currently using it on a project for a client (it appeared to be a better fit at the outset of the project), and while it gets the job done, it is very complex and much more powerful than most projects need. The support is good, but since Frans and his support people are in Europe, that often means you will not get a good answer to your questions until the following day, which can be frustrating.&lt;br&gt;&lt;br&gt;Jason Bunting&lt;br&gt;</description></item><item><title>Active Development?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2435&amp;key=3wh03IldBQlLFbxEB9wpKg%3d%3d&amp;post=7424</link><pubDate>Wed, 31 Jan 2007 00:45:08 GMT</pubDate><description>&lt;P&gt;I'm honestly behind where I would like to be right now due to other things going on.&amp;nbsp; I've started making changes in my life and work to rectify that, but it takes time.&amp;nbsp; So if you need someone making new changes right now then sadly its not me, but I can also assure you it is a very mature product with very few issues or shortcomings at this time.&lt;/P&gt;
&lt;P&gt;Thanks, Paul Wilson&lt;/P&gt;</description></item><item><title>Active Development?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2435&amp;key=3wh03IldBQlLFbxEB9wpKg%3d%3d&amp;post=7382</link><pubDate>Wed, 31 Jan 2007 00:42:39 GMT</pubDate><description>&lt;P&gt;I'm sooo tempted to buy this. At $50 it appears to be a real bargain. I have a question though... Exactly how active is the project? I purchased a piece of software last Christmas only to find that its development ceased within a few months... Most frustrating.&lt;/P&gt;
&lt;P&gt;I get the impression Paul is very passionate about the project (I've been Googling), but there have been no updates since October's news item.&amp;nbsp;Paul mentioned that the next version might be .Net 2.0 only. If development is still active, I think that focusing on .Net 2.0 would be a good move because of the benefits offered there in.&lt;/P&gt;
&lt;P&gt;I'd been looking to purchase the more expensive LLBLGen Pro (what a weird name?!) when I stumbled upon this site. That project appears to be &lt;STRONG&gt;very&lt;/STRONG&gt; active, and the support there appears to be very responsive, but all of that comes at a price (and a very different approach).&lt;/P&gt;</description></item><item><title>Whu so ... cheap?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1881&amp;key=ex6FT68K8kZkPWwxp4c4WQ%3d%3d&amp;post=6957</link><pubDate>Mon, 31 Jul 2006 03:50:06 GMT</pubDate><description>&lt;P&gt;Thanks to this pricing schema, I was able to purchase a license and learn more about ORM.&amp;nbsp; I'm really glad this is priced this way.&amp;nbsp; I'm a bit turned off by the higher priced software out there - they treat everyone like some big money corporation.&amp;nbsp; It's not easy to push expensive software in some shops - they figure they pay you the big bucks, they don't make room for tools outside of Studio&amp;nbsp; :)&lt;/P&gt;
&lt;P&gt;So, thanks Paul - it's fantastic work, you really helped someone like me who was highly interested in ORM tools to get started.&amp;nbsp; The more I see what you have provided the more impressed I am.&lt;/P&gt;</description></item><item><title>Subscriber Previews</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=2078&amp;key=JThucHCLEWiTOjGzD1T9SA%3d%3d&amp;post=6464</link><pubDate>Tue, 11 Apr 2006 02:12:55 GMT</pubDate><description>See the &lt;a href="/News/Default.aspx?part=72&amp;amp;action=more&amp;amp;id=28&amp;amp;key=bo5%2bG3v5j6nHCtAUxHorwQ%3d%3d"&gt;latest news&lt;/a&gt; for more information.&lt;br&gt;&lt;br&gt;Thanks, Paul Wilson&lt;br&gt;</description></item><item><title>Wilson ORM vs. NHibernate vs. LLBGEN </title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1918&amp;key=B7dZ33B2HPlgbXz14aLihg%3d%3d&amp;post=6046</link><pubDate>Wed, 22 Feb 2006 13:05:14 GMT</pubDate><description>There's a very high level feature chart in this article: http://www.howtoselectguides.com/dotnet/ormapping.  Its a little too high level in my opinion to do much good, other than maybe allowing you to eliminate some you've never heard of anyhow.  :)  The problem with these things are that O/RMs really are going to be somewhat different once you get past the basic features -- there's just too many styles out there, and its not necessary to conclude that one one or two can be good when it comes down to style.&lt;br /&gt;
&lt;br /&gt;
Thanks, Paul Wilson</description></item><item><title>Wilson ORM vs. NHibernate vs. LLBGEN </title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1918&amp;key=B7dZ33B2HPlgbXz14aLihg%3d%3d&amp;post=6043</link><pubDate>Wed, 22 Feb 2006 11:42:59 GMT</pubDate><description>Thanks for the replies.&lt;br /&gt;
&lt;br /&gt;
That was my general feeling looking around ... would be nice if there was a side-by-side feature comparison sheet around to know what is and what is not included in each ORM.  Is there one???&lt;br /&gt;
&lt;br /&gt;
Thanks again</description></item><item><title>Wilson ORM vs. NHibernate vs. LLBGEN </title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1918&amp;key=B7dZ33B2HPlgbXz14aLihg%3d%3d&amp;post=6006</link><pubDate>Sat, 18 Feb 2006 13:19:07 GMT</pubDate><description>In general I do not approve comments that compare various O/R Mappers, but this last one did seem to fit the stylistic point I was trying to make.  That said, I'm also sure that there may be some generalizations about specific O/R Mappers that are not completely true -- so try them for yourself.&lt;br /&gt;
&lt;br /&gt;
Thanks, Paul Wilson</description></item><item><title>Wilson ORM vs. NHibernate vs. LLBGEN </title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1918&amp;key=B7dZ33B2HPlgbXz14aLihg%3d%3d&amp;post=6005</link><pubDate>Sat, 18 Feb 2006 10:17:52 GMT</pubDate><description>Without saying which one is better, I would say that both NHibernate and WORM are good for building OO domain layers, that is, they let you build your domain objects in whatever way you want without a lot of overhead.  NHibernate is supposedly a little more complicated, and also has more features, but to what extent I don't know since I haven't used it.&lt;br /&gt;
&lt;br /&gt;
LLBLGen on the other hand builds business objects, but they are MUCH more closely tied to the database table structure than the other two mappers.  LLBLGen in general is also very tied to the relational data model, rather than an OOP domain model.  It also relies on a lot of code generation and inheritance from the LLBLGen API, so there is a lot more features built into the objects it creates for you but also a lot more complexity and API overhead.  However, at the same time there a ton of feautures that are in LLBLGen that aren't in WORM and that may not be in NHibernate.&lt;br /&gt;
</description></item><item><title>Wilson ORM vs. NHibernate vs. LLBGEN </title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1918&amp;key=B7dZ33B2HPlgbXz14aLihg%3d%3d&amp;post=6001</link><pubDate>Fri, 17 Feb 2006 19:58:28 GMT</pubDate><description>Hi Wayde:&lt;br /&gt;
&lt;br /&gt;
I won't get into this very much, as you're honestly better off trying each one to see for yourself.  There are certainly a few feature differences that exist, but they are probably the features that don't matter to the vast majority of people.  So I think it really comes down to finding the mapper that best fits your personal style, unless of course you really need some specific feature that only some mappers have.&lt;br /&gt;
&lt;br /&gt;
I think the style differences are obvious when you try LLBLGen Pro and compare it to mine or NHibernate -- and some people will chose LLBLGen Pro and some won't -- its just an obvious difference and not a question of right or wrong.  As for my mapper and NHibernate, there is not as big of a difference, but if you don't need the specific features where we differ then I still think its most likely best to try both and see for yourself.&lt;br /&gt;
&lt;br /&gt;
Thanks, Paul Wilson </description></item><item><title>Wilson ORM vs. NHibernate vs. LLBGEN </title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1918&amp;key=B7dZ33B2HPlgbXz14aLihg%3d%3d&amp;post=5998</link><pubDate>Fri, 17 Feb 2006 16:44:12 GMT</pubDate><description>Hey Paul,&lt;br /&gt;
&lt;br /&gt;
Long time user of WORM ... long time since last post here.  Was wondering if you wouldn't mind elaborating on the key differences between your ORM, NHibernate and LLBGen.  I have used WORM on one project and it was pretty smooth ... but my client has asked me to consider others as well.&lt;br /&gt;
&lt;br /&gt;
Anyways, would love to hear your thoughts!&lt;br /&gt;
&lt;br /&gt;
Thanks - Wayde</description></item><item><title>Whu so ... cheap?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1881&amp;key=ex6FT68K8kZkPWwxp4c4WQ%3d%3d&amp;post=5907</link><pubDate>Tue, 07 Feb 2006 23:18:02 GMT</pubDate><description>Thanks a lot, hope this will help to push my efforts forward.</description></item><item><title>Whu so ... cheap?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1881&amp;key=ex6FT68K8kZkPWwxp4c4WQ%3d%3d&amp;post=5889</link><pubDate>Mon, 06 Feb 2006 11:17:06 GMT</pubDate><description>Roman,&lt;br /&gt;
&lt;br /&gt;
Hey, not that your 'chief' will care - I just want to say that I use Paul's tool all the time in many projects, and many of my coworkers (all of us are consultants that work for many different clients) now use this tool as well. It is worth much more than Paul sells it for and is one of the .NET world's best-kept secrets in my opinion.&lt;br /&gt;
&lt;br /&gt;
Jason Bunting&lt;br /&gt;
</description></item><item><title>Whu so ... cheap?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1881&amp;key=ex6FT68K8kZkPWwxp4c4WQ%3d%3d&amp;post=5880</link><pubDate>Mon, 06 Feb 2006 03:29:42 GMT</pubDate><description>Hi Roman:&lt;br /&gt;
&lt;br /&gt;
First of all, it is $50 per developer, not $50 for a team.  I frequently get asked how much a team or &amp;quot;enterprise&amp;quot; license is also.  My answer is to tell me what you think is fair for your company or department.  In other words while I do hope to get more than just $50 for a big group, I don't want to worry about the details.&lt;br /&gt;
&lt;br /&gt;
And that should also help explain why its just $50 per developer in the first place.  Selling software is NOT my main business -- I am a .NET architect / developer / team leader, and that is how I make my living.  Over time I have also created some things that I have found useful, and so I share them with others for a small amount of money instead of going open source.&lt;br /&gt;
&lt;br /&gt;
While I think the ORMapper is great, and I hope its obvious that I do maintain it and use it myself, I also don't want anyone to expect a full-time support team.  So $50 seemed like a price that would allow me to make a little something for my time spent, while neither scaring off too many people or making anyone expect full-time support, while letting me keep doing my own thing too.&lt;br /&gt;
&lt;br /&gt;
Thanks, Paul Wilson</description></item><item><title>Whu so ... cheap?</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1881&amp;key=ex6FT68K8kZkPWwxp4c4WQ%3d%3d&amp;post=5878</link><pubDate>Mon, 06 Feb 2006 01:29:36 GMT</pubDate><description>Hello, Paul.&lt;br /&gt;
I was looking after your ORM library quite for long time and now trying to convience my chief to use it in our development.&lt;br /&gt;
But I got an interesting concern if him - why it is so ... cheap (!)? Why it doesn't cost 200, 500$ for a team license - indeed rivals asks much more money? I now assume, that if you sell you library for 500$ - the decision could be already taken :).&lt;br /&gt;
Could you kindly reveal me reasons for selecting the very this price - 50$?&lt;br /&gt;
&lt;br /&gt;
Kindest wishes, &lt;br /&gt;
  Roman Koreshkov&lt;br /&gt;
  Systems Architect&lt;br /&gt;
  Intercomp Technologies L.L.C.</description></item><item><title>Open Source Licensing</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1727&amp;key=yCbBGD2uBfOhAz55ADbhqQ%3d%3d&amp;post=5546</link><pubDate>Tue, 20 Dec 2005 18:35:29 GMT</pubDate><description>Hey Jason:&lt;br /&gt;
&lt;br /&gt;
Sorry, I'm not doing well at keeping up lately -- and I was trying to think of how to answer this one.  I don't want to go into details here, since it would then be easier to break, but you can figure it out pretty easily if you look at the DemoLicense.cs file -- or just email me.  I'm not even saying that what I have in mind is the best way, but its one way.&lt;br /&gt;
&lt;br /&gt;
Thanks, Paul Wilson</description></item><item><title>Open Source Licensing</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1727&amp;key=yCbBGD2uBfOhAz55ADbhqQ%3d%3d&amp;post=5544</link><pubDate>Tue, 20 Dec 2005 15:54:03 GMT</pubDate><description>I tried to post this the other day, but apparently it didn't take . . . &lt;br /&gt;
&lt;br /&gt;
Paul, would it be easy enough to describe how to compile our own 'custom' version of the binary? I mean, if you were planning on telling 'Per' how to do this, is it something abstract enough that you could tell the rest of your subscribers how to do it (by including these details in the zip file of the full product, for example)? I ask because there are quite a few things I want to use the binary for as well, and I too want to make sure no one can get any use out of your tool without being a paying customer.&lt;br /&gt;
&lt;br /&gt;
I suppose there are many ways of doing this, so I am really being quite lazy about this - I simply wonder if your ideas on how to do such a thing are easier than mine. I mean, if a subscriber has full source code, there are many things we could do to 'disable' someone using your tool outside of the context of our applications . . . &lt;br /&gt;
&lt;br /&gt;
Jason</description></item><item><title>Open Source Licensing</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1727&amp;key=yCbBGD2uBfOhAz55ADbhqQ%3d%3d&amp;post=5454</link><pubDate>Mon, 12 Dec 2005 06:01:55 GMT</pubDate><description>Thank you, I understand your view completely. Like you said the &amp;quot;license&amp;quot; doesn't mention this scenario so I thought I'd ask you. One of the goals of making my project open source would be to point to the benefits of O/R mapping by using a great tool like yours. The last thing I would want is for you to lose out on the deal!&lt;br /&gt;
&lt;br /&gt;
If I ever get to the point of finishing the project, document it enough to be usable by others and thinking of releasing it I'll give you a shout for a custom version of the binary. ;-)&lt;br /&gt;
&lt;br /&gt;
/Per</description></item><item><title>Open Source Licensing</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1727&amp;key=yCbBGD2uBfOhAz55ADbhqQ%3d%3d&amp;post=5405</link><pubDate>Fri, 02 Dec 2005 03:26:32 GMT</pubDate><description>I do get asked this question at times, although I always have mixed feelings about it to be honest.  First, my little readme &amp;quot;license&amp;quot; does not suggest any such limitation, and its hardly a real &amp;quot;legal&amp;quot; license at all -- so legally you can do as you want.  Now I would certainly hope that if you do so that its understood that the source code should not be distributed -- it would be only the compiled binary -- and that may be a problem of another sort, since many forms of open source insist on every component also be open source.  Finally, if you don't see that as a problem, then I would appreciate it if you don't &amp;quot;advertise&amp;quot; the ORMapper usage too much since that would mean I could lose potential subscribers, or if you want I can create a custom version that would only be usable by your application if you get in touch with me via email with project details.&lt;br /&gt;
&lt;br /&gt;
Thanks, Paul Wilson</description></item><item><title>Open Source Licensing</title><link>http://wilsonormapper.com/Forums/Default.aspx?part=74&amp;action=thread&amp;id=1727&amp;key=yCbBGD2uBfOhAz55ADbhqQ%3d%3d&amp;post=5397</link><pubDate>Thu, 01 Dec 2005 06:22:36 GMT</pubDate><description>Hi, I'm working on a small web app where I make use of the O/R-mapper. I'm thinking of releasing it as open source.&lt;br /&gt;
&lt;br /&gt;
Is it ok to use and include the WilsonORMapper.dll in this application? (I am a subscriber.)&lt;br /&gt;
&lt;br /&gt;
/Per</description></item></channel></rss>