MyGeneration: Генерация blt-классов по схеме БД и метаданным
От: Andy77 Ниоткуда  
Дата: 24.08.06 20:16
Оценка: 98 (5)
#Имя: FAQ.rfd.MyGeneration
Надоело мне руками строить бизнес-классы, пришлось освоить MyGeneration и написать скрипт, который анализирует выбранные таблицы, вьюхи, связи и генерирует классы с DataAccessor'ами.

Вот так выглядит интерфейсная часть скрипта —



На выходе получаем набор файлов вроде этого —

// Auto-generated by MyGeneration using BLToolkit mapping template
using System;
using System.Collections.Generic;
using BLToolkit.Data;
using BLToolkit.DataAccess;
using BLToolkit.Mapping;

namespace PlateBltDemo
{
   [TableName("HIG.CAMPUS")]
   public class Campus
   {
      [PrimaryKey,
       MapField("ID")]             public int       Id;
      [MapField("CODE")]           public string    Code;
      [MapField("NAME")]           public string    Name;
      [MapField("COMPANY_ID")]     public int?      CompanyId;
      [MapField("COMMENTS")]       public string    Comments;
      [MapField("SOURCE")]         public string    Source;
      [MapField("SOURCE_CD")]      public string    SourceCd;
      [MapField("IUD_FLAG")]       public string    IudFlag;
      [MapField("DATE_CREATED")]   public DateTime? DateCreated;
      [MapField("DATE_MODIFIED")]  public DateTime? DateModified;
      [MapField("USER_CREATED")]   public string    UserCreated;
      [MapField("USER_MODIFIED")]  public string    UserModified;

      public Company GetCompany(DbManager db)
      {
         return DataAccessor.CreateInstance<CompanyAccessor>(db).SelectByKey(CompanyId);
      }
   }

   public abstract class CampusAccessor : OracleDataAccessor<Campus>
   {
      [SqlQuery("select * from HIG.CAMPUS where ID=:id")]
      public abstract List<Campus> GetByIdSql(int id);

      [SqlQuery("select * from HIG.CAMPUS where COMPANY_ID=:companyId")]
      public abstract List<Campus> GetByCompanyIdSql(int? companyId);
   }
}


Также можно помечать таблицы/поля в MyGeneration атрибутами, влияющими на кодогенерацию (например — можно задавать имя Оракловской последовательности, из которой берется следующий Id). Или же можно помечать справочники атрибутом, указывающим, что данную таблицу нужно загружать один раз при первом обращении и впоследствии искать в памяти. В планах — расширить систему таким образом, чтобы на основании метаданных и схемы скрипт полностью генерировал DAL вместе с хранимыми процедурами и юнит тестами.

Сам скрипт находится здесь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.