Skip to main content

How to use "PetaPoco - A tiny ORM-ish thing for your POCOs"

PetePoco is a tiny, fast, single-file micro-ORM for .NET and Mono.
  • It is a single file that you easily add to any project.
  • It works wit strongly typed POCO's.
  • It supports a close relationship between object and database table.
  • It is fast because it uses dynamic method generations (MSIL) to assign column values to properties. 



And this is how you can use it to insert, update, delete and retrieve the records, it is amazing and easy to use!
  • Add PetePoco package to your project by using Nuget (http://nuget.org/List/Packages/PetaPoco)
  • After installation you will see the PetaPoco class added to your project.
  • It is ready to use and this is how you can use it!


[PetaPoco.TableName("fsCarts")]
[PetaPoco.PrimaryKey("RecordID")]
public class Cart
{
  [Key]
  public int RecordId { get; set; }
  public string CartId { get; set; }
  public Guid ProductId { get; set; }
  public int Count { get; set; }
  public DateTime DateCreated { get; set; }

}

UmbracoDatabase con = ApplicationContext.Current.DatabaseContext.Database;

public void AddToCart(Product product)
{
    try
    {
       var cartItem = con.FirstOrDefault<Cart>("SELECT * FROM fsCarts WHERE CartID=@0 AND ProductID=@1", ShoppingCardId, product.ProductId);

        if (cartItem == null)
        {
            cartItem = new Cart
            {
               ProductId = product.ProductId,
               CartId = ShoppingCardId,
               Count = 1,
               DateCreated = DateTime.Now
             };
             con.Insert("fsCarts", "RecordID", cartItem);
         }
         else
         {
              cartItem.Count++;
              con.Update("fsCarts", "RecordID", cartItem);
          }
    }
    catch (Exception ex)
    {
        Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Shopping Cart AddToCart: " + ex.ToString())));
    }
}

////////////////////

public int RemoveFromCart(int id)
{
    int itemCount = 0;
    try
    {
        var cartItem = con.FirstOrDefault<Cart>("SELECT * FROM fsCarts WHERE CartID=@0 AND RecordId=@1", ShoppingCardId, id);

        if (cartItem != null)
        {
            if (cartItem.Count > 1)
            {
                cartItem.Count--;
                itemCount = cartItem.Count;
                con.Update("fsCarts", "RecordID", cartItem);
             }
             else
             {
                con.Delete("fsCarts", "RecordID", cartItem);
              }
        }

     }
     catch (Exception ex)
     {
         Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Shopping Cart RemoveFromCart: " + ex.ToString())));
      }

    return itemCount;
 }


////////////////////

public List<Cart> GetCartItems()
{
    List<Cart> cartItemList = new List<Cart>();
    try
    {
        cartItemList = con.Query<Cart>("SELECT * FROM fsCarts WHERE CartID=@0", ShoppingCardId).ToList();

    }
    catch (Exception ex)
    {
        Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Shopping Cart GetCartItems: " + ex.ToString())));
    }
   return cartItemList;
}

////////////////////

public decimal GetTotal()
{
    decimal? total = null;
    try
    {
        total = con.ExecuteScalar<decimal>("SELECT SUM(ISNULL(p.Price,0)*c.Count) FROM fsCarts c INNER JOIN fsProducts p ON c.ProductID=p.ProductID WHERE c.CartID=@0", ShoppingCardId);

     }
     catch (Exception ex)
     {
        Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Shopping Cart GetTotal: " + ex.ToString())));
      }
    return total ?? decimal.Zero;
}

Comments

Popular posts from this blog

How to fix Git push error: "RPC failed; curl 56 HTTP/2 stream 7 was reset send-pack: unexpected disconnect while reading sideband packet fatal: the remote end hung up unexpectedly"

Problem Today I saw the following problem when I tried to push my changes to a Git server after doing some work for upgrading an Umbraco v7 project to v8.18.8.  Possible reasons After some investigations, it seems like this could be because of the following reasons; Git is not happy with the amount of changes that are being pushed into the server.  There are possible limitations on the server about the size/amount of files that you can push. Your internet connection is not good and stable enough. Your Git client's version is old. Solution options For me, the easiest option was connecting to another Wifi and trying again. Apparently, this option helped quite a few people, so it is worth giving it a try. Unfortunately, it didn't work for me. A bad internet connection wasn't an option for me either, as my internet is pretty fast (500 Mbps). Similarly, my Git client version was the latest version (git version 2.41.0.windows.3).  On StackOverflow, there were a lot of recommendat

How to use JQuery Ajax Methods for Async ASP.NET MVC Action Methods

Making repeatedly calls to async methods can be a nightmare. In this case, it makes sense to use 2 ajax methods, instead of one. Here is a simple solution to overcome this problem. See that  ajaxcalls   is emptied after the success response for the first ajax call and then the second ajax method is used to make one single call to the async action method. Hope it helps. View: @section Scripts{     < script type ="text/javascript">         var smartDebitObject = new Object();         smartDebitObject.MembershipNumber = $( "#MembershipNumber" ).val();         smartDebitObject.ProfileId = $( "#ProfileId" ).val();         smartDebitObject.FirstName = $( "#FirstName" ).val();         smartDebitObject.LastName = $( "#LastName" ).val();         smartDebitObject.AddressLine1 = $( "#AddressLine1" ).val();         smartDebitObject.Postcode = $( "#Postcode" ).val();         smartDebitObject

Umbraco lifehack: How to setup anchor/jump links in Umbraco without making code changes

Today one of my clients created a ticket asking whether it is possible to set up anchor/jump links for an Umbraco content page so that they could link different sections of the page together. This is a common scenario for most Content editors and it should be super easy with any CMS platform, right? Houston, we got a problem! Now an anchor or page jump link is a special URL that takes you to a specific place on a page and it normally requires a unique HTML element ID to link different parts of a page.  When I investigated my issue, I realised that the page sections of the Umbraco page didn't have unique IDs.  View Source Code comes to the rescue In order to resolve the issue without any code changes, I decided to update the content using the built-in View Source Code feature of Umbraco CMS. This feature is available on built-in property editors, like Rich Text Editor and is super handy for checking the code that Umbraco generates for your Front-end website and making minor adju