سلام استاد
من چون یه دیتابیس داشتم واسه پروژه م از کد زیر برای اضافه کردنش به لایه دیتا استفاده کردم مشکلی هم نداشتم
Scaffold-DbContext "Server=.;Database=OliveShopDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities -ContextDir Context -Context OliveShopDBContext
وقتی تغییری در دیتابیس ایجاد میکنم هم برای آپدیت پروژه از همان کد بالا استفاده میکنم و فقط یه -Force به آخرش اضافه میکنم که بازم تا اینجا مسئله ای نیست فقط تنظیماتی که در متد OnModelCreating اضافه کردم با آپدیت شدن میره و دوباره باید کپی کنم.
ممنون میشم راهنمایی کنید
سلام
کلاس context را partial کنید و تنظیمات رو در کلاس partial دیگری از این نوع بزارید
چون پاک میشه و دوباره ساخته میشه
دوباره سلام
استاد کلاس 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);
اگه راه دیگه ای هم هست که بعدا تو توسعه مجبور نباشم این دو خط را اضافه کنم ممنون میشم راهنمایی کنید؟
من از همون روش که گفتم استفاده میکنم
حتما اشتباهی کردید
سرچ کنید نمونه کد بسیار هست