CSLA .NET

From Rockford Lhotka's Expert C# 2008 and VB 2008 Business Objects books

Welcome to CSLA .NET Sign in | Join | Help
in Search

How to build a Business Object using CSLA.NET to access data from 2 different Databases.

Last post 05-05-2008, 3:32 AM by tarekahf. 24 replies.
Page 1 of 2 (25 items)   1 2 Next >
Sort Posts: Previous Next
  •  04-05-2008, 5:11 AM 22528

    How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    Requirement:

    The Data required is split among 2 different Database Engines, say, Adabas on UNIX and SQL Server on Windows 2003 Server.

    We are using CONNX 10.5 to have ODBC or OLEDB Access to the Adabas Database Tables, and it works successfully.

    On the UI, sometimes we need to access the data only from Adabas, and some other times, from both, Adabas and SQL Server, for example, to get a list of Staff Info in one list to be attached to the GridView DataSource.

    In the normal situation, the data is supposed to be stored in one Database say only from Adabas. So, the SQL String looks like the following:

    "select StaffID, StaffName, StaffAge, Salary from AdabasTable;"
    (Note: This is a simplistic example, of course, the actual case is more complicated).

    But the above cannot be done because the "Salary" is stored in different Database, in SQL Server, which requires another connection string, and he SQL String for accessing the data from Adabas say:

    "select StaffID, StaffName, StaffAge from AdabasTable"

    ...and the SQL String for access the data from SQL Server say:

    "select staffid, Salary from SQLServerTable"

    Of course, StaffID is the primary key and same in both tables.

    Each SQL String must be executed against the appropriate Connection String, which is stored in the web.config file. So, we have 2 different Connection Strings.

    How I can design a Business Object (class) that can retrieve the list of staff, from Adabas only, then another class which is reusing the first one to retrieve the same list which has both data from Adabas and SQL Server, and combine the result in one list ?

    One way to solve this problem, is to define a Linked Server in SQL Server, use OpenQuery() function to open the Adabas Table in SQL Server, and use one SQL String to join the tables between Adabas and SQL Server. As a mater of fact, this is what I am doing right now, but this method defeats the concepts of OOP, as you may have already built a class to retrieve the first part, and all what you need to do is to get second part of the data from the other Database Table. The ideal way is to define another class and re-use the functionality of the first class (bu inheritance), but I cannot figure out how to do that exactly.

    Say the class/methods look something like the following:

    (Note: The syntax my not be 100% correct, this is just for clarification purposes)

    public class clsStaff1
    private _StaffID as String
    private _StaffName as String
    private _StaffAge as Integer
    private Salary as double
    public propert ReadOnly StaffID() as String
      get
        return _StaffID
      end get
    end property
    ...bla bla bla ...
    ... bla bla...
    ... same for StaffName, StaffAge, and Salaray ... read only is needed...
    ... bla bla...
    public shared function getStaffList() as DataTable
      con = open connection to Adabas Table
      SQLStr = "select StaffID, StaffName, StaffAge from AdabasTable"
      Execute the SQL String and return the DataTable using Adaptor for example !
      return the resultant DataTable (for use with the DataSourceContorl/GridView for example)
    end function
    end class

    The question is: How to define another class "clsStaff2" the re-uses the first class "clsStaff1" (by inheritance) and just add the the "Salary" from SQL Server Table ?

    I think one way to do that is to do the Join between the 2 DataTables in the VB Code, is this possible ?

    Is this approach practical in the first place ?

    I hope I was able to clarify my requirement and appreciate your help.

    Tarek.

  •  04-05-2008, 7:32 AM 22531 in reply to 22528

    Re: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    Don't confuse the fact that you have two database vendors with business object design.

    The first is an unfortunate situation, the second an opportunity.

    Design your business objects the way they should be.
    I would not define two business objects just because I had two databases. 

    Inside your data access methods in your business objects, you have several options:

    1. open database one and get that data.  open database two and get that data.  merge into the appropriate business object data structures.  from the outside world's point of view, there is only one business object.  Ditto on insert/update/deletes.   The sample business objects are pretty clear on where the selects, inserts, updates, etc. go.
    2. make the database-to-database links you described.  open one database and issue the queries from both.  again, from the outside world's point of view, there is only one database object.

  •  04-05-2008, 9:52 AM 22534 in reply to 22531

    Re: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    Thanks a lot ... I agree with you 100% ...!

    david.wendelken:

    Inside your data access methods in your business objects, you have several options:

    1. open database one and get that data.  open database two and get that data.  merge into the appropriate business object data structures.  from the outside world's point of view, there is only one business object.  Ditto on insert/update/deletes.   The sample business objects are pretty clear on where the selects, inserts, updates, etc. go.

    Should I do the merger one record at a time ? Remeber that the requirement is to return a LIST of records which has data fields from 2 different Databases ... I am just wondering how would that be possible in VB Code ? Meaning:

    Open First Connection / SQL

    Open Second Connection / SQL

    Loop over first SQL String

      Get Next Record from first SQL

      Get Field Data from first SQL 

      Lookup the Second SQL against the StaffID

      Get Field Data from the Second SQL

      How to merge the fields here, in ArrayList? , DataTable ? Is it good approach ?

    End Loop until end of file of first SQL.

    Return the Merged Data in one list.

    make the database-to-database links you described.  open one database and issue the queries from both.  again, from the outside world's point of view, there is only one database object.

    Yes, this is the method I am following now, and it is working successfully. But the only problem is that, sometimes, you already developed the Business Object that represents the First Part. After some time, you need additional parts, so you Create the Database and I was thinking now, how I can re-use the First Business Object ? This is my problem.

    Regards ...

    Tarek.

  •  04-05-2008, 2:43 PM 22537 in reply to 22534

    Re: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    I would probably get 2 lists (with 1 SQL statement each) and close all connections.

    Then in code you can figure out how to merge them based on the same PK value. Use loops here - not while executing SQL commands.

    Joe

     

  •  04-10-2008, 6:44 PM 22665 in reply to 22537

    Re: How to build a Business Object using CSLA.NET to access data from 2 different Databases.


    (NOTE: I am not receiving notification with each reply. I could not find an option to enable notification with each replyonly to my post in these forums. Please help.)

    JoeFallon1:

    I would probably get 2 lists (with 1 SQL statement each) and close all connections.

    Then in code you can figure out how to merge them based on the same PK value. Use loops here - not while executing SQL commands.

    Joe



    I though that it would e better to follow OO recommendations for code reusability.

    I mean, since that I already developed the first BO to fetch the list of Staff Info, then I would develop another BO that inhirits the first one, prepare and execute the other SQL Statement to get the second list (from the other Database), and then merge the 2 lists togther using code and depending on the PK. Finally, return the merged list as the result.

    My question here, would be is: what Object Type you will use for the list ?

    - Array list of objects,

    - Data Table

    - Data Set

    ...etc ?

    I have not used CSLA.NET yet... I am still doing some reading and playing with the PT Sample application. But I could not figure out how it is done there?

    I am interested to know how you would implement such requirement in CSLA.NET ?

    Currently, I am using Array List of Objects to return the list to the Datasource Control in the UI side. This methd works fine with me as of now.

    In general, I think this is a common issue not only related to such specific case I mentioned in this thread ? So what do you do ?

    Do you execute the SQL Statement, and return the result AS IS (using say Data Adaptor Fill method to populate a Data Table), or do you have to loop through the result (using say command ExecuteReader method)  to do some processing for each record from the Data Reader before adding the record to the result list ?

    In CSLA.NET, in case you need to write a Business Object that will return a List of Data (say Staff Info), then you many have to wirte a loop that will read each and every record, one at a time, do some processing, calculation, validation, authorization, and based on the final resutl, add the required record and/or data fields to the resultant list... correct ?

    Although you can do some of the processing in Stored Procedures, or even on the Query Select Statement (say concat First+Middle+Last Name to get Staff Name, and Convert it to Proper Case) , but in think it is more appropriate to keep such processing inside the code, and in some cases, you may prefer to do it inside the Query.

    Any feedback will be appreciated.

    Tarek.
  •  04-10-2008, 11:07 PM 22672 in reply to 22665

    RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    Good oo design is based upon what the Business definition of the object should be.

     

    Whether that object’s comes from 0, 1 or 5 tables is irrelevant.

     


    From: tarekahf [mailto:cslanet@lhotka.net]
    Sent: Thursday, April 10, 2008 7:45 PM
    To: david_wendelken@nc.rr.com
    Subject: Re: [CSLA .NET] How to build a Business Object using CSLA.NET to access data from 2 different Databases.

     


    (NOTE: I am not receiving notification with each reply. I could not find an option to enable notification with each replyonly to my post in these forums. Please help.)

    JoeFallon1:

    I would probably get 2 lists (with 1 SQL statement each) and close all connections.

    Then in code you can figure out how to merge them based on the same PK value. Use loops here - not while executing SQL commands.

    Joe



    I though that it would e better to follow OO recommendations for code reusability.

    I mean, since that I already developed the first BO to fetch the list of Staff Info, then I would develop another BO that inhirits the first one, prepare and execute the other SQL Statement to get the second list (from the other Database), and then merge the 2 lists togther using code and depending on the PK. Finally, return the merged list as the result.

    My question here, would be is: what Object Type you will use for the list ?

    - Array list of objects,

    - Data Table

    - Data Set

    ...etc ?

    I have not used CSLA.NET yet... I am still doing some reading and playing with the PT Sample application. But I could not figure out how it is done there?

    I am interested to know how you would implement such requirement in CSLA.NET ?

    Currently, I am using Array List of Objects to return the list to the Datasource Control in the UI side. This methd works fine with me as of now.

    In general, I think this is a common issue not only related to such specific case I mentioned in this thread ? So what do you do ?

    Do you execute the SQL Statement, and return the result AS IS (using say Data Adaptor Fill method to populate a Data Table), or do you have to loop through the result (using say command ExecuteReader method)  to do some processing for each record from the Data Reader before adding the record to the result list ?

    In CSLA.NET, in case you need to write a Business Object that will return a List of Data (say Staff Info), then you many have to wirte a loop that will read each and every record, one at a time, do some processing, calculation, validation, authorization, and based on the final resutl, add the required record and/or data fields to the resultant list... correct ?

    Although you can do some of the processing in Stored Procedures, or even on the Query Select Statement (say concat First+Middle+Last Name to get Staff Name, and Convert it to Proper Case) , but in think it is more appropriate to keep such processing inside the code, and in some cases, you may prefer to do it inside the Query.

    Any feedback will be appreciated.

    Tarek.


  •  04-12-2008, 4:55 PM 22745 in reply to 22672

    Re: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    I did some research on this issue and found this useful link:

    http://msdn2.microsoft.com/en-us/library/8bw9ksd6(VS.80).aspx


    I can use Typed or Untyped Datasets, Data Tables and perform merging with the help of DataRelation Object.

    As per my initial understanding of CSLA framework, CSLA uses untyped Data Sets and uses Data Adapters to populate Data Sets, and binds the result to the UI Controls.

    Instead of using Fill method of the Data Adapter, I can populate the Data Set/Data Table record by record and perform the required merging/join, calculation, processing before adding the result to the Data Row Collection of the Data Table.

    I hope that my understanding is correct, if yes, do you think this is a good approach ? Any other suggestions ?

    Tarek.
  •  04-12-2008, 7:14 PM 22746 in reply to 22745

    Re: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    CSLA doesn't do the data access for you at all. So it doesn't use DataSets or TableAdapters.

    But you can use DataSets and TableAdapters to write your data access code if you want to. Or you can use raw ADO.NET connection/command/datareader objects (they are faster, but may require more coding).

    Either way, you will need to write code to talk to each database and get the results. Then you copy the resulting values into the fields of your CSLA business object. Then you use data binding to bind the business object to the UI controls.


    Rocky
  •  04-13-2008, 2:09 AM 22750 in reply to 22746

    Re: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    RockfordLhotka:

    CSLA doesn't do the data access for you at all. So it doesn't use DataSets or TableAdapters.

    But you can use DataSets and TableAdapters to write your data access code if you want to. Or you can use raw ADO.NET connection/command/datareader objects (they are faster, but may require more coding).

    Either way, you will need to write code to talk to each database and get the results. Then you copy the resulting values into the fields of your CSLA business object. Then you use data binding to bind the business object to the UI controls.

    Rocky, thanks a lot !

    Please allow me to clarify some points which are not clear to me.

    For the time being, I am interested in finding out what is the Data Type used to return a list of objects to be bound on say a GridView, and how this is done ?

    Ref. to PTracker Sample Application (PTWeb), I checked the code for "ProjectList" class and found the following:

    <Serializable()> _
    Public Class ProjectList
    Inherits ReadOnlyListBase(Of ProjectList, ProjectInfo)
    Public Shared Function GetProjectList() As ProjectList
      Return DataPortal.Fetch(Of ProjectList)(New Criteria)
    End Function
    ...
    ...
    Private Sub Fetch(ByVal nameFilter As String)
      RaiseListChangedEvents =
    False
      Using cn As New SqlConnection(Database.PTrackerConnection)
      cn.Open()
      Using cm As SqlCommand = cn.CreateCommand 
      With cm
      .CommandType = CommandType.StoredProcedure
    ...
    ...
    ...
    ...
    End Sub

    I understand that this might be out of the scope of this forum, but we have already submitted a request to purchase 3 books about CSLA (from your website) and it might take some time to arrive. Also, it will take some time to read and understand. The code above is using some kind of advanced ASP.NET Concepts which I am not familiar with.

    The management requested from our team members to do a research to select a Framework for developing .NET Applications (Windows and Web) to help streamline, standardized and reduce the development efforts. I must prepare a demo/presentation with a Sample Project as per our applications, and of course I must explain such concepts and be ready for questions.

    I appreciate your help and understanding. I have the following questions:

    1. In a High-Level Language , what is the code above doing ? I am very much confused with this notation: ... Inherits ReadOnlyBase (Of ProjectList, ProjectInfo...) .

    2. Usually, DataSources for Lists are returnd as DataTables, DataSets or DataReader Objects, or even as ArrayList (which I usually use). How does this compare with the List returned by the "ProjectList" class ?

    3. We usually use "Integrated Windows Authentication" to authenticate users, but this project is using Forms Authenticaiton. Do you have a sample project with Windows Authentication. For Roles and Authorization, I am very happy with the way it is implemented in the PTracker Application. Any advise how to quickly convert this application to use Windows Interated Authentication.

    4. Do you have any adivse or recommendation or some material I can use for my presentation/demonistration about CSLA.NET.

    (Note: We are evaluating CSLA.NET, NHibernate, DNN, WCSF, DataObjects.NET, Genome)

    Tarek.

  •  04-13-2008, 3:19 AM 22751 in reply to 22750

    Re: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    One thing will be of a great help to me, if there is some effort spent before to implement the Application of the sample Northwind DB using CSLA.NET, with a some documentation.

    I am sorry if I am asking for too much.

    Tarek.

  •  04-13-2008, 3:23 AM 22752 in reply to 22750

    Re: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    tarekahf:

    For the time being, I am interested in finding out what is the Data Type used to return a list of objects to be bound on say a GridView, and how this is done ?

    You are returning a strongly typed collection that will only hold ProjectInfo objects.

    tarekahf:

    I understand that this might be out of the scope of this forum, but we have already submitted a request to purchase 3 books about CSLA (from your website) and it might take some time to arrive. Also, it will take some time to read and understand. The code above is using some kind of advanced ASP.NET Concepts which I am not familiar with.

    Neither was I when I started working with CSLA! :)

    I'm not sure what part of the world you are in and what the salary structure is there.  I'm working in Africa right now and a good technical book is a BIG chunk of a local programmer's monthly salary.  If where you are working has a similar wage structure, I understand waiting.  But, if you are working for North American/Western European wages, get off your duff and order a copy of the books for yourself.  Consider it an investment in yourself.  If you master the material in the CSLA framework, you can qualify for a job anywhere in the world, and they'll be darn glad to have you! :)  Even if you never use CSLA, the concepts that Rocky explains in his books will serve you very well.

    tarekahf:

    The management requested from our team members to do a research to select a Framework for developing .NET Applications (Windows and Web) to help streamline, standardized and reduce the development efforts. I must prepare a demo/presentation with a Sample Project as per our applications, and of course I must explain such concepts and be ready for questions.

    I am pretty familiar with DNN.  It's a nice product. 

    If I needed a free portal product, I would very much consider it.   For building in house applications, I prefer CSLA.   I have't used the other frameworks, so no comment there.

    tarekahf:

    1. In a High-Level Language , what is the code above doing ? I am very much confused with this notation: ... Inherits ReadOnlyBase (Of ProjectList, ProjectInfo...) .

    As for "inheriting" code, that is making use of a .Net concept called Generics.  Have you ever written a method that accepted integer arguments, then needed to write the same basic code to handle floating points and strings?  That's what generics are for.  You write some standardized code and put some "compiler placeholders" in it.  When you inherit from a generic class, you have to tell it what object types are to be substituted for the compiler placeholders.  The compiler does a quick find and replace operation and builds a custom class tied to the object types you provided.  There are lots of web articles on how to use generics.  (I'm on a very slow network connection, it took 5 minutes just to wait on the reply button, so you'll have to look for one yourself.)

    tarekahf:

    2. Usually, DataSources for Lists are returnd as DataTables, DataSets or DataReader Objects, or even as ArrayList (which I usually use). How does this compare with the List returned by the "ProjectList" class ?

    A strongly typed collection is a better basis for business objects.   I think they are much easier to use than the built-in objects.

    tarekahf:

    3. We usually use "Integrated Windows Authentication" to authenticate users, but this project is using Forms Authenticaiton. Do you have a sample project with Windows Authentication. For Roles and Authorization, I am very happy with the way it is implemented in the PTracker Application. Any advise how to quickly convert this application to use Windows Interated Authentication.

    There are several threads covering Windows Authentication and CSLA.  It works great with Windows Authentication.  The sample project doesn't include it because it is a sample product, and has to work for people who aren't using Windows Authentication.   The CSLA business objects integrate VERY WELL with this technology.

    tarekahf:

    4. Do you have any adivse or recommendation or some material I can use for my presentation/demonistration about CSLA.NET.

    Send me a private email and I'll email you a powerpoint presentation covering csla basics.  It's meant to work with the sample Project Tracker application.

    Or maybe Rocky can post it on his website and save me getting a bunch of emails? :)

    CSLA makes very good use of inheritance, interfaces, and generics.   If you aren't well versed in those topics, you will want to study up.  You will be glad you did!
  •  04-13-2008, 3:44 AM 22753 in reply to 22751

    RE: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    From a “sample application” point of view, you wouldn’t learn anything more from looking at a sample application based on Northwind instead of ProjectTracker.

     

    There would just be more pages to look at.  The coding techniques would be the same.

     


    From: tarekahf [mailto:cslanet@lhotka.net]
    Sent: Sunday, April 13, 2008 4:19 AM
    To: david_wendelken@nc.rr.com
    Subject: Re: [CSLA .NET] RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

     

    One thing will be of a great help to me, if there is some effort spent before to implement the Application of the sample Northwind DB using CSLA.NET, with a some documentation.

    I am sorry if I am asking for too much.

    Tarek.



  •  04-13-2008, 5:07 AM 22756 in reply to 22752

    Re: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    Dear david.wendelken,

    Just a quick note about the books. I checked a while ago, and I was told that they have been ordered (3 books). It is not a problem of cost or salary (as the books are very affordable). It is a problem of availability. I can order them on-line, but I why do I have to bather, if the management is very keen to provide us all the books we need ?! As of now, I have more than 6 books on ASP.NET, so this is not a problem.

    Actually, even if I have the CSLA.NET books today, I still need at least a week to update my knowledge, and the time limit that was given to me is not enough (in addition to the other assignments I have). One of my colleagues have already submitted a very nice proposal for the COMPLETE requirements using DNN and Codesmith, and he provided a complete step-by-step document showing how to build a Sample Northwind Application using such approach. If I do not give something similar to describe the concept, there will be little chance to have CSLA.NET Adopted.

    Tarek.

  •  04-13-2008, 1:19 PM 22760 in reply to 22750

    Re: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    tarekahf:

    I understand that this might be out of the scope of this forum, but we have already submitted a request to purchase 3 books about CSLA (from your website) and it might take some time to arrive. Also, it will take some time to read and understand. The code above is using some kind of advanced ASP.NET Concepts which I am not familiar with.

    There are three books. The Expert 2005 Business Objects book is paper and must be ordered through a regular bookstore or online book store. It would take time to arrive.

    The two ebooks on http://store.lhotka.net are ebooks, PDF, and so need to be downloaded directly from the store web site once the purchase is complete. They take no time to arrive, so if you don't have them then you should return to the web site and download them.

    tarekahf:

    1. In a High-Level Language , what is the code above doing ? I am very much confused with this notation: ... Inherits ReadOnlyBase (Of ProjectList, ProjectInfo...) .

    CSLA .NET provides a set of base classes, like ReadOnlyBase, which provide features that are useful when building an object-oriented business layer. The key is that CSLA helps build an object-oriented business layer, and so if you are looking for something more like a DataSet model then CSLA may be a bad fit.

    CSLA helps you build a business layer composed of objects, where the objects encapsulate validation, authorization, implement data binding, n-level undo and several other very useful features. It provides a standard approach you can use to implement these behaviors, and helps you reduce code and complexity within this environment.

    ReadOnlyBase is a base class that is used to create read-only objects. BusinessBase is a similar base class that is used to create editable objects.

    tarekahf:

    2. Usually, DataSources for Lists are returnd as DataTables, DataSets or DataReader Objects, or even as ArrayList (which I usually use). How does this compare with the List returned by the "ProjectList" class ?

    If you create an object-oriented business layer then your UI should only interact with business objects. Never with data access technologies like the DataSet or ADO.NET. ProjectList inherits from ReadOnlyListBase, which provides support for read-only lists of read-only objects, including rich support for data binding (WPF, Windows Forms and Web Forms), authorization and abstract data access.

    tarekahf:

    3. We usually use "Integrated Windows Authentication" to authenticate users, but this project is using Forms Authenticaiton. Do you have a sample project with Windows Authentication. For Roles and Authorization, I am very happy with the way it is implemented in the PTracker Application. Any advise how to quickly convert this application to use Windows Interated Authentication.

    Yes, the PTWeb application in ProjectTracker uses forms authentication. And Chapter 10 in the Expert 2005 Business Objects book also discusses the use of the MembershipProvider (and people have discussed it on this forum too) if you want to use that feature of ASP.NET.

    tarekahf:

    4. Do you have any adivse or recommendation or some material I can use for my presentation/demonistration about CSLA.NET.

    The primary sources of information about CSLA .NET are the three books, www.lhotka.net/cslanet and this forum.


    Rocky
  •  04-13-2008, 4:11 PM 22765 in reply to 22760

    Re: RE: How to build a Business Object using CSLA.NET to access data from 2 different Databases.

    Many thanks to Rocky and David for the valuable replies. I am in a much better position now.

    I have create a new project from scratch to develop a sample application based on CSLA.NET which is relevant to our environment. Initially, I will focus on bulding the Web Presentation, UI, and Business Logic. It will be about Country List and Staff Info (the BOs), and the relationship between both entities. I will try to connect such BOs to 2 different Databases (Adabas on UNIX accessed via CONNX Gateway, and SQL Server). I am copying the relevant bits and parts from the PTracker Application to the new application, and will try to enable Windows Authentication. I have found several threads and one article discussing this topic, and I have created a special thread for this subject, and received several replies.

    I inquired about the eBooks we ordered (for CSLA 2.x and 3.x), and I was told that they are waiting for some confirmation number from PayPal or something like that for several days, it is taking longer than expected !!!. The other book (Business Objects for CSLA.NET 2.x) has been order from Amazon.com today (regular book).

    Tarek.
Page 1 of 2 (25 items)   1 2 Next >
View as RSS news feed in XML

Please contact Magenic for your .NET consulting
and CSLA .NET mentoring needs.
Please consider making a donation to help support the ongoing development of CSLA .NET.

Make donation through PayPal - it's fast, free and secure!
Why donate?
Powered by Community Server, by Telligent Systems