SalarDbCodeGenerator نسخه 2 و NHibernate

۱۳۹۱/۰۶/۰۳ ۱۴:۲۸ Salar Khalilzadeh https://plus.google.com/105397214522932500988 منتشر شده در تاریخ : ۱۳۹۱/۰۶/۰۳ دسته بندی : ، 1

در پست قبلی با SalarDbCodeGenerator آشنا شدید. در این پست می خواهیم نسخه 2 این نرم افزار رو به طور خلاصه بررسی کنیم.
برخی از تغییرات مهم نسخه 2:
  • الگوی جدید NHibernate MappingByCode (پشتیبانی از MVVM و data annotations)
  • الگوی جدید Dapper+SQLinq که از کتابخانه SQLinq و توابع کمکی در Dapper استفاده می کنه
  • باز نویسی مجدد موتور شمای الگوها
  • بازنویسی مجدد موتور اصلی
  • شمای جدید پروژههای برنامه
  • به روز شدن همه الگوها
  • بهبود سرعت کلی تولید کد
  • خواندن و شناسایی اعمال کلید خارجی
  • پشتیبانی از توضیحات ستون ها در oracle و sqlCe
و البته پروژه های نسخه 1 توسط این نسخه پشتیبانی نمی شود.
لیست کامل تغییرات در صفحه دانلود قرار دارد.

نگاهی به پیاده سازی NHibernate MappingByCode انجام شده.
پیاده سازی نگاشتها بدون استفاده ClassMapping و صرفا با استفاده از کلاس کمکی ModelMapper انجام شده است. این متد کمکی در فایل SampleDbMapper قرار می گیرد.
همچنین برای پیاده سازی های سفارشی متد دیگری با نام CustomMapToModel در نظر گرفته شده است.
در کل ساختار پروژه به این صورت می شود:

Base\SampleDbBase.cs
Entities\DataAnnotations\*Meta.cs
Entities\UserEntities\*Entity.cs
Entities\Principal\EntityObjects.cs
Entities\SampleDbMapper.cs
Entities\SampleDbMapper.User.cs
Entities\SampleDbSession.cs
app.config
تقریبا ساختار بیشتر پروژه های تولید شده توسط این برنامه به همین شکل است. به همین منوال بقیه، کلاس پایه SampleDbBase.cs شامل چند متد اضافی هست که به تهیه کپی از کلاسهای مدل کمک می کند. از جمله متدهای CloneUnproxied و CopyUnproxied که یک نمونه بدون پراکسی را تهیه می کنند.
طریقه استفاده از این پروژه ساده است. با استفاده از کلاس کمکی SampleDbSession یک نمونه از session را ایجاد کرده و بقیه اعمال را به منوال عادی NHibernate انجام می دهیم:

using (var session = SampleDbSession.OpenSession())
{
    var newCar = new Car()
        {
            Color = "white"
        };
    session.Save(newCar);
    session.Flush();
}
using (var session = SampleDbSession.OpenStatelessSession())
{
    dataList = session.Query<car>().Where(x => x.Color == "white");
}

نگاهی به Dapper+SQLinq
این الگو همانند الگوی DapperAccess است که کتابخانه SQLinq به آن اضافه شده است. این کتابخانه این امکان را برای Dapper فراهم می کند که با استفاده از عبارات LINQ کوئری مورد نظر بدون استفاده مستقیم از عبارات sql عملیات استاندارد را انجام دهد. ترکیب Dapper و این کتابخانه راحتی و سرعت قابل قبولی را فراهم می کند.
این کتابخانه فقط از SqlServer پشتیبانی می کند.

نمونه کد:

using (var dap = new CarDap())
{
    dataList = dap.Query(new SQLinq<car>().Where(x => x.Color == "white"));
}

بهبودها و نسخه بعدی
در این نسخه از SalarDbCodeGenerator اصلاح کننده نام های نامعتبر تغییرات زیادی کرده و بهبود یافته است. به همین علت ممکن است که پروژه تولید شده با این نسخه سازگار با نسخه های قبلی سازگار نباشد.

همچنین برای نسخه های آینده احتمالا بر روی ویژگی های جدید EF5 کار خواهم کرد (پشتیبانی از Enum و Table-Valued).

نظر شما چیست؟ چه ویژگی به نظرتون حیاتی است و می خواهید در نسخه بعدی مشاهده کنید؟

دانلود

 

یک بازخورد برای “SalarDbCodeGenerator نسخه 2 و NHibernate”

  1. کارت خیلی عالیه، خودت باهاش پروژه واقعی انجام دادی؟ نتیجه چقدر برات رضایت آمیز بوده؟

    پاسخحذف