Transactions

BLToolkit.NET

Business Logic Toolkit for .NET www.bltoolkit.net
  Transaction.cs
using System;

using NUnit.Framework;

using BLToolkit.Data;
using BLToolkit.DataAccess;
using BLToolkit.Mapping;

namespace HowTo.DataAccess
{
    [TestFixture]
    public class Transaction
    {
        public abstract class TestAccessor : DataAccessor<Person>
        {
            public abstract int  Insert(Person person);
            public abstract void Delete(int @PersonID);

            public abstract Person SelectByKey(int id);
            public abstract Person SelectByKey(DbManager db, int id);
        }

        // DataAccessor takes DbManager as a parameter.
        //
        [Test]
        public void Test1()
        {
            using (DbManager db = new DbManager())
            {
                TestAccessor ta = DataAccessor.CreateInstance<TestAccessor>(db);

                ta.BeginTransaction();

                int id = ta.Insert(new Person { FirstName = "John", LastName = "Smith" });
                Assert.AreNotEqual(0, id);

                Person person = ta.SelectByKey(id);
                Assert.IsNotNull(person);

                ta.Delete(id);

                ta.CommitTransaction();
            }
        }

        // DataAccessor method takes DbManager as a parameter.
        //
        [Test]
        public void Test2()
        {
            using (DbManager db = new DbManager())
            {
                db.BeginTransaction();

                TestAccessor ta = DataAccessor.CreateInstance<TestAccessor>();

                int id = ta.Insert(new Person { FirstName = "John", LastName = "Smith" });
                Assert.AreNotEqual(0, id);

                Person person = ta.SelectByKey(db, id);
                Assert.IsNotNull(person);

                ta.Delete(id);

                db.CommitTransaction();
            }
        }
    }
}
Person.cs
using System;

using BLToolkit.DataAccess;
using BLToolkit.Mapping;

namespace HowTo.DataAccess
{
    public class Person
    {
        [MapField("PersonID"), PrimaryKey, NonUpdatable]
        public int    ID;

        public string LastName;
        public string FirstName;
        public string MiddleName;
        public Gender Gender;
    }
}
Gender.cs
using System;

using BLToolkit.Mapping;

namespace HowTo.DataAccess
{
    public enum Gender
    {
        [MapValue("F")] Female,
        [MapValue("M")] Male,
        [MapValue("U")] Unknown,
        [MapValue("O")] Other
    }
}
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add
            key   = "ConnectionString"
            value = "Server=.;Database=BLToolkitData;Integrated Security=SSPI"/>
    </appSettings>
</configuration>
Create.sql script
 
© 2010 www.bltoolkit.net
[email protected]