تعیین شمای جداول بانکی در EF Code First
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

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




  • #
    ‫۱۲ سال و ۳ ماه قبل، یکشنبه ۱۱ تیر ۱۳۹۱، ساعت ۲۱:۳۱
    با توجه به نوع تعریف شما برای Migration میتونید آپدیت شمای بانک رو بصورت اتوماتیک به ef بسپارید:
    // DAL Layer
        public class Configuration : DbMigrationsConfiguration<MyContext> {
          public Configuration() {
       AutomaticMigrationsEnabled = true;
           AutomaticMigrationDataLossAllowed = true;
    
     // Global.asax
        void Application_Start(object sender, EventArgs e) {
           Database.SetInitializer(
             new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
    // Program.cs
        class Program
        {
            static void Main(string[] args) {
               Database.SetInitializer(
                 new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
    ولی برای درخواست شما از سمت بانک به مدل باید فعلا بطور دستی این کار رو انجام بدید