view HowTo/Data/UpdateObject.cs @ 1:8f65451dc28f

Исправлена проблема с фабрикой и выборкой нескольких объектов в linq выражении
author cin
date Fri, 28 Mar 2014 01:04:56 +0400
parents f990fcb411a9
children
line wrap: on
line source

using System;
using System.Collections.Generic;

using NUnit.Framework;

using BLToolkit.Data;
using BLToolkit.Mapping;
using BLToolkit.Reflection;

namespace HowTo.Data
{
	[TestFixture]
	public class UpdateObject
	{
		public enum Gender
		{
			[MapValue("F")] Female,
			[MapValue("M")] Male,
			[MapValue("U")] Unknown,
			[MapValue("O")] Other
		}

		public abstract class Person
		{
			[MapField("PersonID")]
			public abstract int    ID         { get; }

			public abstract string LastName   { get; set; }
			public abstract string FirstName  { get; set; }
			public abstract string MiddleName { get; set; }
			public abstract Gender Gender     { get; set; }
		}

		int InsertPerson(Person person)
		{
			using (DbManager db = new DbManager())
			{
				return db
					.SetCommand(@"
						INSERT INTO Person
							( LastName,  FirstName,  MiddleName,  Gender)
						VALUES
							(@LastName, @FirstName, @MiddleName, @Gender)

						SELECT Cast(SCOPE_IDENTITY() as int)",
						db.CreateParameters(person))
					.ExecuteScalar<int>();
			}
		}

		Person GetPersonByID(int id)
		{
			using (DbManager db = new DbManager())
			{
				return db
					.SetCommand("SELECT * FROM Person WHERE PersonID = @id",
						db.Parameter("@id", id))
					.ExecuteObject<Person>();
			}
		}

		void UpdatePerson(Person person)
		{
			using (DbManager db = new DbManager())
			{
				db
					.SetCommand(@"
						UPDATE
							Person
						SET
							LastName   = @LastName,
							FirstName  = @FirstName,
							MiddleName = @MiddleName,
							Gender     = @Gender
						WHERE
							PersonID = @PersonID",
						db.CreateParameters(person))
					.ExecuteNonQuery();
			}
		}

		void DeletePerson(int id)
		{
			using (DbManager db = new DbManager())
			{
				db
					.SetCommand("DELETE FROM Person WHERE PersonID = @id",
						db.Parameter("@id", id))
					.ExecuteNonQuery();
			}
		}

		[Test]
		public void Test()
		{
			// Insert.
			//
			Person person = TypeAccessor<Person>.CreateInstanceEx();

			person.FirstName = "Crazy";
			person.LastName  = "Frog";
			person.Gender    = Gender.Unknown;

			int id = InsertPerson(person);

			person = GetPersonByID(id);

			TypeAccessor.WriteConsole(person);
			Assert.IsNotNull(person);

			// Update.
			//
			person.Gender = Gender.Other;

			UpdatePerson(person);

			person = GetPersonByID(id);

			TypeAccessor.WriteConsole(person);
			Assert.AreEqual(Gender.Other, person.Gender);

			// Delete.
			//
			DeletePerson(id);

			person = GetPersonByID(id);

			Assert.IsNull(person);
		}
	}
}