فراخوانی View توسط Entity framework Core
View چیست ؟
در SQL Server ، ویو یک جدول مجازی می باشد که ماحصل اجرای یک کوئری می باشد که برای سناریو های خاصی نوشته شده اند که به صورت Read-only می باشند.
اگر نیاز به نوشتن View دارید و از EntityFramework Core استفاده می می کنید، میتوانید طبق روشی که در ادامه توضیح داده خواهد شد اقدام به استفاده از View نمایید.
ایجاد View :
ابتدا نیاز داریم یک View ایجاد نماییم، برای ایجاد View با استفاده از اضافه نمودن Migration اقدام به ایجاد view میکنیم.
برای اینکار ابتدا دستور زیر را اجرا نمایید تا یک migration جدید ایجاد میکنیم :
1 |
Add-Migration AddUserWithArticlesView |
و سپس محتوای آن را به صورت زیر تغییر میدهیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public partial class AddUserWithArticlesView : Migration { protected override void Up(MigrationBuilder migrationBuilder) { string sql = @"CREATE VIEW [dbo].[vwUserArticles] AS u.FirstName +' ' +u.LastName as FullName,a.subject FROM dbo.Articles as a INNER JOIN dbo.Users as u ON a.AuthorId = u.Id"; migrationBuilder.Sql(sql); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.Sql(@"DROP VIEW vwUserArticles"); } } |
و سپس دستور زیر را اجرا میکنیم تا Migration فوق بر روی دیتابیس اعمال شود و View ساخته شود:
1 |
Update-Database |
تا به اینجا موفق شدیم View مورد نظر را ایجاد کنیم.
در مرحله بعد نیاز هست یک Model مطابق با خروجی view مورد نظر ایجاد کنیم، برای این منظور کلاس زیر را ایجاد میکنیم :
1 2 3 4 5 6 |
[Keyless] public class UserWithArticles { public string FullName { get; set; } public string Subject { get; set; } } |
و سپس نیاز داریم تا یک DbSet از نوع کلاس فوق را به DataContext اشافه نماییم:
1 |
public virtual DbSet<UserWithArticles> UserWithArticles { get; set; } |
نکته حائر اهمیت در مورد استفاده از view ها این هست که Model مروبطه دارای کلید اصلی نیست و اگر با Entity Framework آشنایی داشته باشید، همه مدل هایی که تحت DbSet به context معرفی می شود می بایست دارای کلید اصلی باشند در غیر اینصورت ایجاد دیتابیس با خطا مواجه خواهد شد. در مدل فوق که معادل view هست فیلدی تحت عنوان کلید اصلی نداریم و نیازی به داشتن آن نیست، برای اتمام کار نیاز هست تا کانفیگ زیر برای مدل مربوط انجام شود :
1 2 3 4 5 6 7 8 9 |
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder .Entity<UserWithArticles>(eb => { eb.HasNoKey(); eb.ToView("vwUserArticles"); }); } |
بعد از انجام این مراحل، همانند سایر DbSet های دیگر میتوان اطلاعات را از دیتابیس فراخونی کرد.
مطالب زیر را حتما مطالعه کنید
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.
سلام از مطلب بسیار آموزنده تون ممنونم
ببخشید اگر ویو رو در بانک اطلاعاتی ایجاد کرده باشیم ، امکانش هست که به صورت مستقیم با بقیه مدل ها ، مدل view هم ساخته بشه ؟
منظورم با دستور Scaffold-DbContext هست ، که بقیه جداول رو از بانک فراخوانی و مدلهای مربوطه ساخته میشه
سلام.
اگر در دیتابیس، View ای داشته باشید، مدل معادل view رو براتون میسازه و از طریق DbContext میتونید به view دسترسی داشته باشید.