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

Как использовать стандартные операции CRUDL (генерация SQL)

Business Logic Toolkit

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

Проект BLToolkit

Класс BLToolkit.DataAccess.DataAccessor позволяет генерировать SQL для стандартных CRUDL операций. Следующий пример демонстрирует применений методов InsertSql, UpdateSql, DeleteSql, SelectByKeySql, SelectAllSql.

using System;
using System.Collections.Generic;

using NUnit.Framework;

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

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

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

            public string LastName;
            public string FirstName;
            public string MiddleName;
            public Gender Gender;
        }

        [Test]
        public void InsertTest()
        {
            DataAccessor da = new DataAccessor();

            Person person = new Person();

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

            da.InsertSql(person);
        }

        [Test]
        public void UpdateTest()
        {
            using (DbManager db = new DbManager())
            {
                // Get object.
                //
                Person person = db
                    .SetSpCommand("Person_SelectByName", "Crazy", "Frog")
                    .ExecuteObject<Person>();

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

                DataAccessor da = new DataAccessor();

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

                da.UpdateSql(db, person);

                person = da.SelectByKeySql<Person>(db, person.ID);

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

                // Delete.
                //
                da.DeleteSql(db, person);

                person = da.SelectByKeySql<Person>(db, person.ID);

                Assert.IsNull(person);

                // Get All.
                //
                List<Person> list = da.SelectAllSql<Person>(db);

                foreach (Person p in list)
                    TypeAccessor.WriteConsole(p);
            }
        }
    }
}

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

-- Person_SelectByName

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Person_SelectByName')
BEGIN
	DROP  Procedure  Person_SelectByName
END
GO

CREATE Procedure Person_SelectByName
	@firstName nvarchar(50),
	@lastName  nvarchar(50)
AS

SELECT
	*
FROM
	Person
WHERE
	FirstName = @firstName AND LastName = @lastName

GO

GRANT EXEC ON Person_SelectByName TO PUBLIC
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    Оценка 9        Оценить