Сообщений 0    Оценка 27        Оценить  
Система Orphus

Как добавлять, изменять и удалять бизнес объекты из базы данных

Business Logic Toolkit

Автор: Igor Tkachev
The RSDN Group
Опубликовано: 16.01.2006
Исправлено: 17.01.2006
Версия текста: 1.0

Проект BLToolkit

Для модификации бизнес объектов в базе данных можно использовать один из методов класса BLToolkit.Data.DbManager: ExecuteNonQuery, ExecuteScalar. Список параметров запроса сформируется с помощью методов Parameter и/или CreateParameters.

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);
        }
    }
}

SQL скрипт для создания базы данных:

--CREATE DATABASE BLToolkitData ON PRIMARY
--( NAME = N'BLToolkitTest',     FILENAME = N'C:\Data\MSSQL.1\MSSQL\DATA\BLToolkitData.mdf' ,     SIZE = 3072KB , FILEGROWTH = 1024KB )
--LOG ON 
--( NAME = N'BLToolkitTest_log', FILENAME = N'C:\Data\MSSQL.1\MSSQL\DATA\BLToolkitData_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10% )
--GO

-- Person Table

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('Person') AND type in (N'U'))
BEGIN
    DROP TABLE Person
END

CREATE TABLE Person
(
    PersonID   int          NOT NULL IDENTITY(1,1) CONSTRAINT PK_Person PRIMARY KEY CLUSTERED,
    FirstName  nvarchar(50) NOT NULL,
    LastName   nvarchar(50) NOT NULL,
    MiddleName nvarchar(50)     NULL,
    Gender     char(1)      NOT NULL CONSTRAINT CK_Person_Gender CHECK (Gender in ('M', 'F', 'U', 'O'))
)
ON [PRIMARY]
GO

INSERT INTO Person (FirstName, LastName, Gender)
VALUES             ('John',    'Pupkin', 'M')
GO

App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add 
            key   = "ConnectionString"
            value = "Server=.;Database=BLToolkitData;Integrated Security=SSPI"/>
    </appSettings>
</configuration>


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 0    Оценка 27        Оценить