‫۱۲ سال و ۵ ماه قبل، جمعه ۱۵ اردیبهشت ۱۳۹۱، ساعت ۱۵:۰۹
لطف کنید سؤالی رو که مطرح می‌کنید در حیطه مطلب جاری عنوان شده باشد و خارج از آن نباشد.
سؤال شما هم بحث کلاینت سروری است و نه بحث کلاینت تنها که EF روی آن مشغول به کار است.
- می‌شود در متد Seed ایی که در بالا توضیح دادم در SQL Server تریگر درست کرد. (که مثلا اگر کاربر دیگری به شرط اینکه این کاربر جزو کاربران تعریف شده در خود SQL Server باشد نه در برنامه شما، اتفاق خاصی رخ دهد. برنامه شما هم بدیهی است باید سرور را مدام چک کند تا از این مساله مطلع شود)- SQL Server مبحثی دارد به نام Service Broker : (^). توسط آن می‌توان از طریق سرور به کلاینت اطلاع رسانی کرد. بازهم خارج است از بحث یک ORM. یا تمام ORMهای موجود. - EF مبحثی دارد به نام Concurrency check که اگر شخصی در شبکه بر روی رکوردی که همین الان شما مشغول به کار هستید، تغییری را ایجاد کرد، به شما اطلاع رسانی کند. (در قسمت‌های بعدی بحث خواهد شد). البته این هم خودکار نیست. لازم است یک رفت و برگشت به سرور انجام شود.- entity framework auditing هم میسر است. خودکار نیست. در همان کلاس Context فوق که از DbContext مشتق می‌شود می‌توان متد تحریف شده public override int SaveChanges را تعریف کرد. در اینجا می‌توان به تمام تغییراتی که قرار است اعمال شوند دسترسی داشت. مثلا آن‌ها را در یک جدول مجزا ثبت کرد. بدیهی است برنامه بعدا نیاز خواهد داشت از این جدول گزارشگیری کند.
‫۱۲ سال و ۵ ماه قبل، جمعه ۲۲ اردیبهشت ۱۳۹۱، ساعت ۰۵:۰۷
DbContext نیاز به ارجاعی به اسمبلی EF دارد که باید به این class libraryهای دیگر هم اضافه شود.
‫۱۲ سال و ۵ ماه قبل، یکشنبه ۱۷ اردیبهشت ۱۳۹۱، ساعت ۰۴:۳۱
یک جدول مقایسه‌ای اینجا هست در این مورد: (^)
‫۱۲ سال و ۵ ماه قبل، شنبه ۱۶ اردیبهشت ۱۳۹۱، ساعت ۱۸:۵۲
بحث من در اینجا EF Code first است. در اینجا شما دیگر با SSDL و غیره کاری ندارید.
در مقدمه عرض کردم روش‌های database first و model first هم بودند و هستند. این فرق می‌کنه. code first هست. بحث چیز دیگری است.
‫۱۲ سال و ۵ ماه قبل، جمعه ۱۵ اردیبهشت ۱۳۹۱، ساعت ۲۰:۴۶
- این ویژگی‌ها رو می‌تونید فراموش کنید. چون مثلا SP در SQL Server CE وجود خارجی ندارد. اما برنامه‌ی نوشته شده با EF به راحتی می‌تونه با انواع و اقسام بانک‌های اطلاعاتی که پروایدر EF برای آن‌ها مهیا باشد، کار کند. برنامه شما به دیتابیس خاصی گره نمی‌خوره. اگر لازم بود راحت می‌تونید با تغییر پروایدر و تغییر کانکشن استرینگ، بدون نیازی به تغییر در کدهای خود، از یک بانک اطلاعاتی دیگر استفاده کنید.
- در EF Code first امکان استفاده از SP و امثال آن هم وجود دارد (در جای خودش توضیح خواهم داده به چه نحوی). البته در این حالت برنامه فقط مختص به SQL Server خواهد شد.
‫۱۲ سال و ۵ ماه قبل، جمعه ۱۵ اردیبهشت ۱۳۹۱، ساعت ۱۶:۳۳
در قسمت دوم این سری تحت عنوان «استراتژی‌های مقدماتی تشکیل بانک اطلاعاتی در EF Code first» توضیح دادم.
‫۱۲ سال و ۵ ماه قبل، جمعه ۱۵ اردیبهشت ۱۳۹۱، ساعت ۰۴:۲۱
ضمن اینکه زمانیکه از ORM استفاده می‌کند لایه DAL همان ORM است و نیازی نیست کار اضافه‌تری انجام دهید. این لایه خودبخود لحاظ شده است.
‫۱۲ سال و ۵ ماه قبل، جمعه ۱۵ اردیبهشت ۱۳۹۱، ساعت ۰۴:۱۹
Connection String کاری به دیتامدل نداره. پیش فرض آن نام کلاسی است که از DbContext مشتق می‌شود (در مطلب فوق توضیح دادم: «در هر دو حالت، name باید به نام کلاس مشتق شده از DbContext اشاره کند که در مثال جاری همان Context است.»).
نیازی هم نیست در سراسر پروژه تکرار شود. یکبار باید در فایل کانفیگ برنامه تعریف شود.
اطلاع داشتن از این قراردادهای توکار از اتلاف وقت جلوگیری می‌کند.
‫۱۲ سال و ۵ ماه قبل، پنجشنبه ۱۴ اردیبهشت ۱۳۹۱، ساعت ۲۱:۰۶
- یکی از اهدف ORMها این است که برنامه رو مستقل از بانک اطلاعاتی پیاده سازی کنند؛ تا بتوان در صورت نیاز راحت به یک بانک اطلاعاتی دیگر سوئیچ کرد. من اینجا وقت نگذاشتم در مورد «چرا باید از ORM استفاده کرد» توضیح بدم مانند (^) یا مانند (^) و ... باز هم جستجو کنید هست.
- بله. عدم استفاده از یک ORM‌ در پروژه این روزها اشتباه محض است.
‫۱۲ سال و ۵ ماه قبل، پنجشنبه ۱۴ اردیبهشت ۱۳۹۱، ساعت ۱۶:۲۹
1 و 3 - در انتهای بحث عرض کردم در قسمت‌های بعدی خیلی از موارد رو توضیح خواهم داد. این قسمت اول و فقط یک «مقدمه» ابتدایی بود.
2 - EF با بانک‌های اطلاعاتی NoSQL کار نمی‌کند. ضمنا هستند بانک‌های اطلاعاتی NoSQL ایی که برای دات نت نوشته‌ شده‌اند و از همان روز اول با کلاس‌ها و LINQ کار می‌کنید مانند RavenDB . طراحی فوق ‌العاده‌ای داره (^).
استفاده از EF Code first با سایر بانک‌های اطلاعاتی بجز مشتقات SQL Server نیز میسر است. برای آن‌ها نیاز به پروایدر مخصوص وجود دارد؛ مثلا: (^)