• .NET

    LINQ Tip of the week: System.String support

    Welcome back for some more information about the Telerik OpenAccess ORM support for LINQ. Today we provide a brief list of the System.String properties and methods that are supported by our LINQ implementation. When any of the below listed methods are used in a LINQ query, Telerik OpenAccess ORM translates the method call to equivalent SQL which is then executed on the server. Please note that the table lists the MS SqlServer specific SQL translation.   Properties String.Length len (string_expression)   Methods String.CompareTo expression = expression String.Contains match_expression LIKE pattern String.EndsWith match_expression LIKE pattern String.Equals expression = expression String.IndexOf(String) CHARINDEX (expression1,expression2, –1) String.IndexOf(String,Int32) CHARINDEX (expression1,expression2, start_location) String.Insert CASE   WHEN( LEN(ISNULL(column_name,'')) = start_index) THEN ISNULL(column_name,'') + value ...
    August 28, 2009
  • .NET

    Using the ObjectScope events

    Telerik OpenAccess ORM ObjectScope comes packed with all the events that are needed for managing the lifecycle of your persistent objects. You have events for Add, Remove, Refresh and Update actions. They come in –ed and –ing flavors which would mean that you can successfully iterate with your data before the changes have been made (-ing events) and after the changes have been done(-ed events) . You can subscribe to any or all of them and successfully perform some business logic over your persistent objects. Here is a basic implementation of a generic (in terms of availability for both ObjectScope and ObjectContainer)...
    August 20, 2009
  • .NET

    LINQ Tip of the week: LINQ and Anonymous types

    Today we have a closer look at using LINQ and anonymous types and it's pros and cons. Consider the case where we want to obtain a subset of data instead of an entire persistent instance. For example, if we want to obtain the contact details of all Customers based in London we would use the following query var query = from c in scope.Extent<Customer>()                    where c.City.Equals("London")                    select new { c.City, c.Address, c.ContactName };   Notice the last line in the above query - select new { c.City, c.Address, c.ContactName } This line creates an anonymous type. Behind the scenes, at compile time, a very simple class is generated automatically. In this case, three...
    August 13, 2009
  • .NET

    Telerik OpenAccess ORM and the Second Level Cache

    As we already mentioned last week, Telerik OpenAccess ORM manages two cache levels – one specific for each ObjectScope instance and another shared by all scopes. The shared cache is generally called the "2nd level cache" or the "L2 cache". Its main job is to hold copies of the database content in memory. The L2 cache is populated during read access and gives fast retrieval of commonly used objects. This could be extremely helpful in multithreaded applications, where every single thread has its own ObjectScope. In order to avoid too many calls from each scope to the relational server, the L2...
    August 11, 2009
  • .NET

    How Does the First Level Cache of Telerik OpenAccess ORM Work

    Telerik OpenAccess ORM has two levels of caching. The upper one is a local cache specific for each IObjectScope instance and it is the focus of this post. The lower cache, the second level cache is common for all IObjectScope objects and is used to hold unchanged database content in memory. The values for various fields of the user objects (like a Person instance) are duplicated in the L2 cache. It is populated during read access and gives fast retrieval of commonly used objects. Additionally, the cache can contain complete query results. Note that the L2 cache is not enabled by...
    August 06, 2009