اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
کلاسهای زیر را در نظر بگیرید:
و Context ی که کلاس فوق به آن اضافه میشود:
حالا زمان ایجاد جدول، با توجه به دسترسی کاربر بانک داده، جداول ایجاد میشوند:
ولی به محض ارسال درخواست و عدم دسترسی و نیز اقدام به ایجاد دوباره جداول در صورت نبود آن، به مشکل زیر بر میخوریم:
lشکال در شمای پیش فرض Entityframework است که در زمان درخواست بصورت پیش فرض از dbo استفاده میکند، برای حل مشکل در هنکام نگاشت دو راه موجود است:
راه حل اول(مزین کردن کلاس):
راه حل دوم(استفاده از نگاشت کننده در context):
که نتیجه کار بصورت عبارات sql زیر میباشد:
public class Customer { public virtual string Id { get; set; } public virtual string Name { get; set; } public virtual DateTime HireDate { get; set; } }
public class MyContext : DbContext { public DbSet<Customer> Customers{ set; get; } }
CREATE TABLE Customers ( [Id] [int] NOT NULL IDENTITY, [Name] [nvarchar](max), [HireDate] datetime, CONSTRAINT [PK_Product] PRIMARY KEY ([Id]) )
Invalid object name 'dbo.Customers'.
راه حل اول(مزین کردن کلاس):
[Table("Customers", Schema = "dbSchemaUser")] public class Customer { ...
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Customer>().ToTable(tableName: "Customers", schemaName: "dbSchemaUser"); ...
CREATE TABLE dbSchemaUser.Customers ( [Id] [int] NOT NULL IDENTITY, [Name] [nvarchar](max), [HireDate] datetime, CONSTRAINT [PK_Product] PRIMARY KEY ([Id]) )