استفاده از scaffold در پروژه #C برای ایجاد صفحات CRUD

2/18/2023 MVC
2258

بعد از ایجاد پروژه در Net. لازم بود برای من تا بتوانم از دستورات commandline برای مدیریت پروژه razor page استفاده کنم، اگر قرار باشد دستورات ترمینال یا همان CLI را برای پروژه ها را اجرا کنیم نوع دستور خواهم داشت دستوراتی که فقط لازم است یک بار اجرا کنم و دستوراتی که در هر پروژه اجرا میکنم 

برای ایجاد پروژه در VS code من برای کل پروژه از کد های لینک صفحه زیر استفاده میکنم.

code generator 

dotnet command

دو دستور زیر به صورت عمومی دو پکیج را نصب میکند این دو پکیج برای ارجای دستورات scaffold الزامی هستند 

dotnet tool install -g dotnet-aspnet-codegenerator
dotnet tool install --global dotnet-ef

 و در صورتی که یک بار نصب کنید برای دیگر پروژه ها نیاز نیست تا دوباره نصب کنبد.

البته برای به روز رسانی و یا اپدیتپکیج بالا لازم است دستور زیر را اجرا کنید

 

create project

برای ایجاد پروژه ها repo و models که از نوع class library هستند از دستور زیر استفاده میکنیم 

Dotnet new classlib

برای ایجاد پروژه وب :

dotnet new webapp

dotnet restore

در پروژه model این پکیجها را نصب میکنم 

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

 

البته یاد آوری کنم در پروژه ها از sqlserver استفاده میکنم به همین دلیل پکیج Sqlserver اضافه کردم اگر شما از بانک های اطلاعاتی دیگر استفاده میکنید مانند My SQL و یا sqlite استفاده میکنید میتوانید پکیجهای مربوط به آنها را نصب نمایید

پروژه ها را  به sln پروژه معرفی میکنیم و برای معرفی پروژه ها به هم به صورت سری یا متوالی   model  را یه repo  و  repo را به  web وصل میکنیم 

برای اضافه کردن همه پروژه ها به sln کد زیر استفاده کردم

برای  لینوکس:

dotnet sln todo.sln add **/*.csproj

برای ویندوز

dotnet sln todo.sln add (ls -r **/*.csproj)

 

برای اضافه کردن پروژه ها به صورت سری به هم از کد زیر استفاده میکنم 

dotnet add reference ../Todo_Models/Todo_Models.csproj

در کد بالا من در پروژه repo هستم و پروژه model  را به آن رفرنس دادم

و اگر در root پروژه باشم  برای ارجاع از کد بالا با تغییر کوچکی استفاده خواهم کرد به صورت زیر خواهد بود

dotnet add Todo_Repo/todo_Repo.scproj reference ../Todo_Models/Todo_Models.csproj

و اگر در root پروژه هستید ازاین نمونه استفاده کنید(نمونه کد سایت ماکروسافت)

dotnet add app/app.csproj reference lib/lib.csproj

الیته میتوانید این کد را به صورت دستی به فایل پروژه های که قرار هست رفرنس را دریافت کند اضافه کنید 

  <ItemGroup>
    <ProjectReference Include="..\Todo.Models\Todo.Model.csproj" />
  </ItemGroup>

 

اگر دوست دارید در پروژه خود از Identity دات نت استفاده کنید، با استفاده از دستور کد زیر لیست تمام فایلهایی  که میتوانید جهت Identity استفاده کنید را میبیند

dotnet aspnet-codegenerator identity -lf
Account._StatusMessage
Account.AccessDenied
Account.ConfirmEmail
Account.ConfirmEmailChange
Account.ExternalLogin
Account.ForgotPassword
Account.ForgotPasswordConfirmation
Account.Lockout
Account.Login
Account.LoginWith2fa
Account.LoginWithRecoveryCode
Account.Logout
Account.Manage._Layout
Account.Manage._ManageNav
Account.Manage._StatusMessage
Account.Manage.ChangePassword
Account.Manage.DeletePersonalData
Account.Manage.Disable2fa
Account.Manage.DownloadPersonalData
Account.Manage.Email
Account.Manage.EnableAuthenticator
Account.Manage.ExternalLogins
Account.Manage.GenerateRecoveryCodes
Account.Manage.Index
Account.Manage.PersonalData
Account.Manage.ResetAuthenticator
Account.Manage.SetPassword
Account.Manage.ShowRecoveryCodes
Account.Manage.TwoFactorAuthentication
Account.Register
Account.RegisterConfirmation
Account.ResendEmailConfirmation
Account.ResetPassword
Account.ResetPasswordConfirmation

 

و برای استفاده در پروژه پکیج آن را به صورت زیر نصب میکنیم 

dotnet add package  Microsoft.AspNetCore.Identity.UI
dotnet add package Microsoft.EntityFrameworkCore.Design

 

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore

و برای اضافه کردن فایلهای مربوطه به پروژه 

dotnet aspnet-codegenerator identity -dc MyProject.Models.MyProjectContext --files "Account.Register;Account.Login;Account.Logout;Account.RegisterConfirmation"

 

در زمانی که از پروژه publish میگیریم مشکلی که پیش میاد اینه است که همراه با پوشه های برناه پوشه های دیگر مربوط به مدیریت زبان به آن اضافه میشود ، برای جلوگیری از اضافه شدن آن زبانها میتوانید این کد را به فایل csproj اضافه کنید 

این فایلها مربوط به 

 <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="*.*.*" />

که این فایل را من معمولا به پروژه Model اضافه میکنم

برای همین کد زیر را در پروژه Todo.Model/Todo.Model.csproj اضافه میکنم 

<PropertyGroup>   
    <SatelliteResourceLanguages>en-US;en</SatelliteResourceLanguages>
</PropertyGroup>

 

add razor file in admin area with CRUD

ما قبل از آن 

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools

را به پروژه وب خود اضافه نمایید هرچند در بالا آن را به پروژه MODEL اضافه کرده ایم 

dotnet aspnet-codegenerator razorpage -m Post -dc Devex.Model.DevexContext -udl -outDir Areas/Admin/Pages/posts --referenceScriptLibraries

 

برای ایجاد یک صفحه در زیر مجموعه area  میکروسافت این کد هست 

 

dotnet new page -n Index -na myapp.Pages.Area -o Pages/Area

با تغییرتبدیل کردم به این کد

dotnet new page -n Index -na myapp.Area.Admin.Pages -o Areas/Admin/Pages

اما کد بالا صفحه جدید ایجاد میکند با نام myapp.Area.Admin.Pages.cshtml اما صفحه Index نیاز داریم کد رو به صورت زیر تغغیر دادم تا درست شد.

dotnet new page -n Index -na Index --namespace Myproj.Raz.Area.Admin.Pages  -o Areas/Admin/Pages

با استفاده از کد بالا page جدید به قسمت ادمین اضاافه میگردد، و اگر بخواهیم یه Page جدید به صفخات سایت اضافه کنیم کد زیر قابل استفاده است

 dotnet new page -n Index -na Index --namespace MyProject.Raz.Pages  -o Pages

در کد بالا به جای myproject نام پروژه خود را بنویسید و به جای Index نام صفحه ای که تصمیم دارید ایجاد کنید