ساخت دیتابیس sqlite با EF6 Code First
PM> update-package
ب) همچنین رشتهی اتصالی آن باید به محل دقیق قرارگیری فایل phonebook.sqlite اشاره کند.
ج) نام بستههای موجود در فایل packages.config خودتان را با نمونهی پروژهی پیوستی مطابقت دهید.
این موارد را بررسی کنید؛ وگرنه EF 6x در حال توسعهی پیوسته نیست و تغییر خاصی از زمان نگارش این مطلب نداشتهاست.
+ اگر میخواهید نسخهی EF Core آنرا بررسی کنید:
- نیاز است سری EF Core را در سایت از ابتدا مطالعه کنید.
- VS 2015 دیگر برای کار با NET Core. مناسب نیست. حتما نیاز است VS 2017 را نصب کنید. اطلاعات بیشتر
- پیشنیازهای جدید کار با SQLite در فایل csproj آن برای VS 2017 و EF Core 1.1.1 به صورت ذیل هستند:
<Project Sdk="Microsoft.NET.Sdk.Web"> <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" PrivateAssets="All" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Design" Version="1.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" PrivateAssets="All" /> </ItemGroup> <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.*" /> </ItemGroup> </Project>
Rebuilding EF Providers for EF6 Updating Applications to use EF6 EF Tools: adding EF6 support & enabling out-of-band releases Async Query and Save Connection Resiliency Code-Based Configuration Dependency Resolution Interception/SQL logging Custom implementations of Equals or GetHashCode on entity classes Custom Code First Conventions Code First Mapping to Insert/Update/Delete Stored Procedures Configurable Migrations History Table Multiple Contexts per Database
<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> <parameters> <parameter value="System.Data.SqlServerCe.4.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" /> </providers> </entityFramework>
Update-Package EntityFramework
<!-- 1. Change in <configuration><configSections> --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- 2. Add in <entityFramework><providers> --> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
PM> Install-Package EntityFramework.SqlServerCompact
- نسخه بندی معنایی
- نسخه بندی استاندارد مایکروسافت
- Revision تا 1000 افزایش مییابد
- در اجرای بعدی به 0 تنظیم شده و قسمت Build بعلاوه 1 میشود.
- Build تا 100 افزایش مییابد
- در اجرای بعدی Build به 0 تنظیم شده و قسمت Minor بعلاوه 1 میشود و Revision هم 0 میشود.
- Minor تا 10 افزایش مییابد.
- در اجرای بعدی Minor به 0 تنطیم شده، قسمت Major بعلاوه 1 میشود و قسمتهای قبل همه 0 میشوند.
- مقدار Build از مجموع روزهای که از تاریخ پروژه گذشته است بدست میآید.
- مقدار Revision از مجموع ثانیههای که از نیمه شب محلی روز جاری تا زمان اجرای پروژه تقسم بر دو بدست میآید.
- مقادیر Major و Minor هم با توجه تولید نسخه جدید و تغییرات عمده در نرم افزار بصورت دستی تغییر مییابد.
پس از باز شدن پنجره Version Manager پروژههای Solution جاری بارگذاری و Assembly Version و File Version هر پروژه را میتوانید به راحتی مشاهده و یا تغییر دهید.
اگر بخواهید بصورت خودکار بر اساس شمای انتخاب شده، نسخه نرم افزار را افزایش دهید، شمای نسخه بندی را انتخاب کنید. در دو زمان Build و یا Rebuild پروژه می توان نسخه را افزایش داد.
Semantic Versioning:
- گزینه Semantic Versioning را از قسمت Version Style انتخاب کنید.
- گزینه Increment Action قسمتی از نگارش که میخواهید شمای نسخه بندی بر روی آن اعمال شود را مشخص میکند. که دو گزینه Build یا Revision وجود دارد
- گزینه Increment Event زمان رویداد اعمال شمای انتخاب شده را مشخص میسازد.
- تنظیمات را ذخیره و پروژه خود را Rebuild نمایید.
- در پنجره Output نسخه جدید نشان داده میشود.
Microsoft DateTime:
- گزینه Microsoft DateTime را از قسمت Version Style انتخاب کنید.
- تاریخ شروع پروژه بصورت خودکار خوانده و نمایش داده میشود یا تاریخ شروع پروژه را انتخاب کنید
- با توجه به انتخاب Increment Action نسخه جدید محاسبه میشود.
- پروژه را Rebuild و نسخه جدید را مشاهده نمایید.
همچنین از پروژههای #C و VB.NET و C++ Managed پشتیبانی میکند
این ابزار هنوز در نگارش بتا است و ممکن است باگهایی داشته باشد.
نظرات و پیشنهادات شما توسعه دهندگان عزیز میتواند موجب هر چه بهتر و کاملتر شدن این ابزار باشد.
منوی چند سطحی واکنشگرا
اگر ویژوال استودیو 2022 رو به آخرین نسخه آپدیت کرده باشید احتمالا با مشکل Duplicate در پروژه هایی که از source generator استفاده میکنند یا کتابخانه هایی مانند Refit مواجه شوید. برای حل این مشکل یک فایل global.json در پوشه ای که فایل Solution پروژه قرار دارد ایجاد کنید و محتوای آن را نسخه قبلی دات نت (که بدون مشکل کار میکرد) قرار دهید.
{ "sdk": { "version": "6.0.104", "rollForward": "disable" } }
نمونه ای خطا: Duplicate 'global::System.Obsolete' attribute
NuGet 2.0 منتشر شد
نسخه جدید برنامه مدیریت بستههای دات نت هم آماده شد. میتونین از اینجا دانلودش کنین. (2.5MB)
طبق آمار خود سایت نوگت تا حالا بیش از 14.6 میلیون بار بستههای اون توسط کاربران دانلود شدن و بیش از 7000 بسته متمایز در این گالری موجوده!
یکی از مشکلاتی که تو این نسخه رفع شده موردی بود که در ارتباطات کند اینترنت بوجود میومد (^). تو کنسول این افزونه پس از وارد کردن قسمتی از نام یک بسته با فشردن کلید TAB نام تمام بستههایی که اول اسمشون اون عبارت تایپ شده باشه، لیست میشه (Tab Completion).
این عملیات در نسخههای قبلی با استفاده از یک درخواست HTML به OData (^) انجام میشد که دادههایی بیش از حد نیاز رو برمیگردوند. اما تو این نسخه این عملیات با استفاده از یک درخواست سریع JSON انجام میشه. (^)
من خودم این ویژگی رو تست کردم و افزایش سرعتش قابل ملاحظه بود!
یکی دیگه بهبودهای حاصله در دریافت بستههای وابسته نسبت به نسخه دات نت فریمورک در پروژه هدف هستش. یعنی میشه تنظیماتی روی بستههای نوگت اعمال کرد تا به صورت هوشمندانه نسخه متناسب با دات نت فریمورک مورد استفاده رو دانلود و نصب کنه.
اگه به صفحه مربوط به مشکلات و درخواستهای کاربران برای این افزونه (^) مراجعه کنین میبینید این دو موردکه تو این نسخه برطرف شدن بیشترین تقاضا رو داشتن. مورد اول با توجه به سرعت پایین اینترنت برای خود من خیلی کاربردیه.
نکته: اگر از VS 2010 SP1 استفاده میکنین هنگام به روز رسانی نوگت با استفاده از Extension Manager خود VS ممکنه با خطا مواجه بشین. اصولا بهترین روش نصب نوگت ابتدا unistall کردن نسخه قدیمی این افزونه از طریق appwiz.cpl و سپس نصب نسخه جدید با اجرای فایل vsix. هست (در هر دو قسمت نیاز به دسترسی administrator دارین).
و در نهایت:
You can develop your own package and share it via the NuGet Gallery. (^)
ویرایش:
متاسفانه دیروز وقت نکردم نتایج آزمایش با Fiddler رو اینجا بزارم.
مورد اول (Tab Completion) رو با سه نسخه از نوگت (1.6 و 1.8 و 2.0) برای دو عبارت jque و signa تست کردم و نتایج بدست اومده به شرح زیره. در زیر url درخواست مربوطه به همراه حجم دیتای دریافتی آورده شده:
نوگت 1.6:
nuget ver 1.6 jque: GET https://nuget.org/api/v2/Packages()?$orderby=DownloadCount%20desc,Id&$filter=startswith(tolower(Id),'jque')%20and%20IsLatestVersion&$skip=0&$top=90 HTTP/1.1 53691 bytes signa: GET https://nuget.org/api/v2/Packages()?$orderby=DownloadCount%20desc,Id&$filter=startswith(tolower(Id),'signa')%20and%20IsLatestVersion&$skip=0&$top=90 HTTP/1.1 11536 bytes
نوگت 1.8:
nuget ver 1.8 jque: GET https://nuget.org/api/v2/Packages()?$orderby=DownloadCount%20desc,Id&$filter=startswith(tolower(Id),'jque')%20and%20IsLatestVersion&$skip=0&$top=90 HTTP/1.1 53694 bytes signa: GET https://nuget.org/api/v2/Packages()?$orderby=DownloadCount%20desc,Id&$filter=startswith(tolower(Id),'signa')%20and%20IsLatestVersion&$skip=0&$top=90 HTTP/1.1 11536 bytes
نوگت 2.0:
nuget ver 2.0 jque: GET https://nuget.org/api/v2/package-ids?partialId=jque HTTP/1.0 598 bytes signa: GET https://nuget.org/api/v2/package-ids?partialId=signa HTTP/1.0 457 bytes
پاسخ سرور به عبارت signa در نسخه 2.0:
HTTP/1.1 200 OK Cache-Control: private Content-Type: application/json; charset=utf-8 Server: Microsoft-IIS/7.0 X-AspNetMvc-Version: 3.0 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Thu, 28 Jun 2012 07:23:06 GMT Connection: close Content-Length: 457 ["SignalR","SignalR.Client","SignalR.Client.Silverlight","SignalR.Client.Silverlight5","SignalR.Client.WP7","SignalR.EventStream","SignalR.Hosting.AspNet","SignalR.Hosting.Common","SignalR.Hosting.Owin","SignalR.Hosting.Self","SignalR.Js","SignalR.MicroSliver","SignalR.Ninject","SignalR.RabbitMq","SignalR.Reactive","SignalR.Redis","SignalR.Sample","SignalR.Server","SignalR.StructureMap","SignalR.WebSockets","SignalR.WindowsAzureServiceBus","Signals.js"]
میبینید که غیرقابل مقایسه هستن! و همونوطور که آقای هنسلمن (^) در مورد نسخههای قدیمی گفتن: «دادههای بیش از حد نیاز رو برمیگردونن»
نسخههای قبل از 2.0 همگی از odata استفاده میکردن و دادههای برگشتی تماما encrypt شدهاند. اما در نسخه 2.0 دادههای برگشتی از نوع JSON هست (به Fiddler مراجعه کنین تا تفاوت واقعی رو ببینین. البته برای اینکه دادههای encrypt شده رو در fiddler ببینین باید طبق راهنمایی خودش از تنظیمات مربوط به decrypt ترافیک https استفاده کنین)