• 1397/11/10

تنظیمات OnModelCreating :

سلام استاد

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

Scaffold-DbContext "Server=.;Database=OliveShopDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities -ContextDir Context -Context OliveShopDBContext

وقتی تغییری در دیتابیس ایجاد میکنم هم برای آپدیت پروژه از همان کد بالا استفاده میکنم و فقط یه -Force به آخرش اضافه میکنم که بازم تا اینجا مسئله ای نیست فقط تنظیماتی که در متد OnModelCreating اضافه کردم با آپدیت شدن میره و دوباره باید کپی کنم.

ممنون میشم راهنمایی کنید 

  • 1397/11/11
  • ساعت 08:45

سلام 

کلاس context را partial کنید و تنظیمات رو در کلاس partial دیگری از این نوع بزارید 

چون پاک میشه و دوباره ساخته میشه 


  • 1397/11/11
  • ساعت 22:42

دوباره سلام

استاد کلاس Context را partial کردم ولی نمیشه OnModelCreating را دوباره override کنم.

پس اینجوری عمل کردم:

این کد Context دومه 

  public partial class OliveDBContext : DbContext
    {
    
        partial void CustomOnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<TblUser>(entity => { entity.HasQueryFilter(u => !u.UserIsDeleted); });
            modelBuilder.Entity<TblRole>(entity => { entity.HasQueryFilter(u => !u.RoleIsDeleted); });
        }
    }

توی Context اصلی:

public partial class OliveDBContext : DbContext
    {
        public OliveDBContext()
        {
        }

        public OliveDBContext(DbContextOptions<OliveDBContext> options)
            : base(options)
        {
        }

        public virtual DbSet<TblRole> TblRole { get; set; }
        
        public virtual DbSet<TblUser> TblUser { get; set; }
      
////////اینو اینجا تعریف کردم////////
        partial void CustomOnModelCreating(ModelBuilder modelBuilder);

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
       
    /////// اینجا هم صدا زدم//////
 CustomOnModelCreating(modelBuilder);

          
  modelBuilder.HasAnnotation("ProductVersion", "2.2.1-servicing-10028");

         
            modelBuilder.Entity<TblRole>(entity =>
            {
                entity.HasKey(e => e.RoleId)
                    .HasName("PK_dbo.Tbl_Role");

                entity.ToTable("TblRole", "Account");

                entity.Property(e => e.RoleId).ValueGeneratedNever();

                entity.Property(e => e.RoleCreatedOn).HasColumnType("datetime");

                entity.Property(e => e.RoleCreatorIp)
                    .IsRequired()
                    .HasMaxLength(50);

                entity.Property(e => e.RoleModifiedOn).HasColumnType("datetime");

                entity.Property(e => e.RoleModifierIp).HasMaxLength(50);

                entity.Property(e => e.RoleName)
                    .IsRequired()
                    .HasMaxLength(50);

                entity.Property(e => e.RoleTitle)
                    .IsRequired()
                    .HasMaxLength(150);

                entity.HasOne(d => d.RoleCreatedBy)
                    .WithMany(p => p.TblRoleRoleCreatedBy)
                    .HasForeignKey(d => d.RoleCreatedById)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_Tbl_Role_Tbl_User_CreateById");

                entity.HasOne(d => d.RoleModifiedBy)
                    .WithMany(p => p.TblRoleRoleModifiedBy)
                    .HasForeignKey(d => d.RoleModifiedById)
                    .HasConstraintName("FK_Tbl_Role_Tbl_User_ModifiedById");

                //entity.HasQueryFilter(u => !u.RoleIsDeleted);
            });


            modelBuilder.Entity<TblUser>(entity =>
            {
                entity.HasKey(e => e.UserId)
                    .HasName("PK_Tbl_User");

                entity.ToTable("TblUser", "Account");

                entity.Property(e => e.UserId).ValueGeneratedNever();

                entity.Property(e => e.UserActiveCode)
                    .IsRequired()
                    .HasMaxLength(32)
                    .IsUnicode(false);

                entity.Property(e => e.UserAvatar)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false)
                    .HasDefaultValueSql("('Default.jpg')");

                entity.Property(e => e.UserBirthDate)
                    .IsRequired()
                    .HasMaxLength(10)
                    .IsUnicode(false)
                    .HasDefaultValueSql("('0000/00/00')");

                entity.Property(e => e.UserCellPhone)
                    .HasMaxLength(11)
                    .IsUnicode(false);

                entity.Property(e => e.UserCreatedOn).HasColumnType("datetime");

                entity.Property(e => e.UserCreatorIp).IsRequired();

                entity.Property(e => e.UserEmail)
                    .IsRequired()
                    .HasMaxLength(100)
                    .IsUnicode(false);

                entity.Property(e => e.UserFirstName)
                    .IsRequired()
                    .HasMaxLength(150)
                    .HasDefaultValueSql("(N'-')");

                entity.Property(e => e.UserLastLoginDate).HasColumnType("datetime");

                entity.Property(e => e.UserLastName)
                    .IsRequired()
                    .HasMaxLength(250)
                    .HasDefaultValueSql("(N'-')");

                entity.Property(e => e.UserLockoutEndDateUtc).HasColumnType("datetime");

                entity.Property(e => e.UserModifiedOn).HasColumnType("datetime");

                entity.Property(e => e.UserNationalCode).HasDefaultValueSql("((1))");

                entity.Property(e => e.UserPasswordHash)
                    .IsRequired()
                    .HasMaxLength(1000)
                    .IsUnicode(false);

                entity.Property(e => e.UserTel)
                    .HasMaxLength(11)
                    .IsUnicode(false);

                entity.HasOne(d => d.UserCreatedBy)
                    .WithMany(p => p.InverseUserCreatedBy)
                    .HasForeignKey(d => d.UserCreatedById)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_Tbl_User_CreateById");

                entity.HasOne(d => d.UserModifiedBy)
                    .WithMany(p => p.InverseUserModifiedBy)
                    .HasForeignKey(d => d.UserModifiedById)
                    .HasConstraintName("FK_Tbl_User_ModifiedById");

                //entity.HasQueryFilter(u => !u.UserIsDeleted);
            });
            
        }

 
    }

الان درست کار میکنه فقط هر دفعه که آپدیتش کنم باید این دو خط کد را بهش اضافه کنم

partial void CustomOnModelCreating(ModelBuilder modelBuilder);

CustomOnModelCreating(modelBuilder);

 

اگه راه دیگه ای هم هست که بعدا تو توسعه مجبور نباشم این دو خط را اضافه کنم ممنون میشم راهنمایی کنید؟


  • 1397/11/12
  • ساعت 19:22

من از همون روش که گفتم استفاده میکنم 

حتما اشتباهی کردید 

سرچ کنید نمونه کد بسیار هست


logo-enamadlogo-samandehi