Сериализация набора данных для свойства бизнес-объекта строго типа - PullRequest
0 голосов
/ 14 ноября 2009

В приложении vb .net winforms я пробую что-то для "широких и неглубоких" детей записи. Я использую строго типизированные бизнес-объекты (Strataframe).

Мой план - собрать несколько «дочерних таблиц» в наборе данных, который я помещаю в форму. у них нет соответствия в постоянных данных, поэтому набор данных не типизирован, и я создаю схему через таблицу свойств для таблиц. Каждая таблица является источником данных для сетки данных в интерфейсе.

В моем примере доказательства концепции мой основной бизнес-объект (CustomerBO) взаимодействует с таблицей SQL Server 2008 с полями - pk, name - и третьим столбцом, который в настоящее время является varchar (max), как я рассматривал XML, но мог так же, как легко быть varbinary (max), если это лучше подходит для хранения сериализованного набора данных.

bo.bigfield будет строго типизированной пропойой. Я хочу хранить массив byte () или XML или любой другой элемент, представляющий набор данных для этой записи.

Итак, вопрос в двух словах - как мне преобразовать набор данных в один набор данных и воспроизвести набор данных из этого набора данных. Это мое первое знакомство с наборами данных, а также с обзорами данных, поэтому, если есть лучшие способы для достижения чего-либо из этого, я слушаю.

Код и совет очень ценится - VB или C #

1 Ответ

0 голосов
/ 14 ноября 2009

Есть несколько способов нарезать и нарезать кубиками. Вы говорите об объектно-реляционном сопоставлении. Есть ряд инструментов / фреймворков, вот мои любимые:

Для быстрой разработки приложений SubSonic - моя любимая работа. В последней версии 3.x все, что вам нужно сделать, это создать строку подключения, вызвать слой устойчивости SubSonic и передать ваши объекты. Он создаст DDL для сохранения ваших объектов в БД, и вам не придется по-настоящему разбираться с такими вещами. Вот пример для SubSonic:

    public class BaseDAO
    {
        private const String CONNECTION_STRING = "Repository";
        private static BaseDAO dao = new BaseDAO();
        private SimpleRepository repository;

        protected BaseDAO()
        {
            if (repository == null)
            {
                repository = new SimpleRepository(CONNECTION_STRING, SimpleRepositoryOptions.RunMigrations);
            }
        }

        public BaseDAO Instance()
        {
            return dao;
        }

        public SubSonic.Repository.SimpleRepository Repository
        {
            get { return this.repository; }
            set { this.repository = value; }
        }
    }

public class ProductDAO : BaseDAO
{
    public void save(ProductVO product)
    {
        if (product != null)
        {
            if (product.ID == null)
            {
                product.ID = Guid.NewGuid();
            }

            this.Repository.Add<ProductVO>(product);
        }
        else
        {
            throw new ArgumentException("The product passed in was null!");
        }
    }

    public void update(ProductVO product)
    {
        if (product != null)
        {
            this.Repository.Update<ProductVO>(product);
        }
        else
        {
            throw new ArgumentException("The product passed in was null!");
        }
    }

    public List<ProductVO> fetchAll()
    {
        return fetchAll(null);
    }

    public List<ProductVO> fetchAll(String name)
    {
        IEnumerable<ProductVO> list = this.Repository.All<ProductVO>();

        if (name != null && name.Length > 0)
        {
            var output =
                from products in list
                where products.Name.ToLower().Contains(name.Trim().ToLower())
                select products;

            list = output.ToList();
        }

        return list.OrderBy(product => product.Name).ToList();
    }

    public ProductVO fetchByID(object ID)
    {
        return this.Repository.Single<ProductVO>(ID);
    }

    public void delete(ProductVO product)
    {
        this.Repository.Delete<ProductVO>(product.ID);
    }
}

Это так просто.

...