نمایش نتایج 1 تا 2 از 2

نام تاپیک: ایجاد رکورد خودکار پدر در زمان ایجاد رکورد در فرزند!

  1. #1
    کاربر دائمی آواتار arman_Delta2002
    تاریخ عضویت
    تیر 1387
    محل زندگی
    بابلسر
    سن
    37
    پست
    707

    ایجاد رکورد خودکار پدر در زمان ایجاد رکورد در فرزند!

    سلام 2 تا تیبل داریم یکی Permission و Respondent که نحوه ارتباط یک به چند است یک Respondent به چند Permission

    خوب ارتباط از طریق Ef Core است و
    کد کلاس respondent

    [Table("Respondent")]
    [Serializable]
    public class Respondent : IQuickSearchObject, IUIObject
    {
    #region Constractor
    public Respondent()
    {
    //چون ریکرسیو ایجاد میکنه نباید تو کانسترکتور نیو بشه
    // AccessGroupItem = new AccessGroup();
    //PersonItem = new Person();
    TradeFundID = -1;
    IsAdmin = false; //for all user except for مدیر سیستم
    //MyAccountingConfig = new AccountingConfiguration();
    Permissions = new List<Permission>();
    }

    #endregion

    #region Property

    [DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]

    [Key, ForeignKey("ID")]
    public long ID { get; set; }
    [Column("password")]
    public string Password { get; set; }
    [Column("accessGroupID")]
    // [NotMapped]
    public long? accessGroupID { get; set; }
    [NotMapped]
    public virtual AccessGroup AccessGroupItem { get; set; }
    [Column("personID")]
    public long? personID { get; set; }
    [NotMapped]
    public virtual Person PersonItem { get; set; }
    [NotMapped]
    public virtual List<Permission> Permissions { get; set; }
    #endregion

    }


    کد کلاس Permission

    [Table("Permission")]
    [Serializable]
    public class Permission : IQuickSearchObject
    {
    #region Constractor
    public Permission()
    {
    //چون ریکرسیو ایجاد میکنه نباید تو کانسترکتور نیو بشه
    this.AccessCodeItem = new AccessCode();
    this.AccessGroupItem = new AccessGroup();
    this.RespondentItem = new Respondent();
    }
    #region Peroperty
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]

    [Key, ForeignKey("ID")]
    public long ID { get; set; }

    [ForeignKey("RespondentID")]
    [Column("RespondentID")]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long? RespondentID { get; set; }
    //{
    // get { return RespondentItem.ID; }
    // set { RespondentItem.ID = value; }
    //}
    [NotMapped]
    public virtual Respondent RespondentItem { get; set; }
    #endregion

    }


    کد ریلیشن بین این ها


    modelBuilder.Entity<Respondent>()
    .HasMany(e => e.Permissions)
    .WithOne(e => e.RespondentItem)
    .HasForeignKey(e => e.RespondentID)
    .OnDelete(DeleteBehavior.NoAction);


    dddd.png
    Aaaa.png
    آخرین ویرایش به وسیله arman_Delta2002 : پنج شنبه 06 خرداد 1400 در 18:50 عصر

  2. #2
    کاربر دائمی آواتار bitasoft.ir
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    جنگلهای تاریک اصفهان
    سن
    44
    پست
    279

    نقل قول: ایجاد رکورد خودکار پدر در زمان ایجاد رکورد در فرزند!

    برای ایجاد یک رکورد خودکار در جدول پدر (در اینجا جدول "Respondent") هنگامی که یک رکورد در جدول فرزند (در اینجا جدول "Permission") ایجاد می‌شود، می‌توانید از رویدادهای مربوط به اف‌کور (EF Core) بهره‌برید. برای این کار، می‌توانید به صورت زیر عمل کنید:
    در کلاس Context EF Core خود، یک متد Override ایجاد کنید که هنگامی که یک رکورد در جدول فرزند (Permission) ایجاد می‌شود، یک رکورد در جدول پدر (Respondent) نیز ایجاد کند.
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    // ...

    modelBuilder.Entity<Respondent>()
    .HasMany(e => e.Permissions)
    .WithOne(e => e.RespondentItem)
    .HasForeignKey(e => e.RespondentID)
    .OnDelete(DeleteBehavior.NoAction);


    // ...


    base.OnModelCreating(modelBuilder);
    }


    public override int SaveChanges()
    {
    foreach (var entry in ChangeTracker.Entries())
    {
    if (entry.State == EntityState.Added && entry.Entity is Permission)
    {
    var permission = (Permission)entry.Entity;


    // ایجاد یک رکورد جدید در جدول Respondent
    var respondent = new Respondent
    {
    // تنظیم مقادیر مورد نیاز برای جدول Respondent از رکورد جدید Permission
    // به عنوان مثال:
    // Password = "YourPassword",
    // accessGroupID = 1,
    // personID = 1
    };


    // اضافه کردن رکورد Respondent به Context
    Set<Respondent>().Add(respondent);
    }
    }


    return base.SaveChanges();
    }
    در کد بالا، ما از رویداد SaveChanges برای تعقیب افزودن رکورد در جدول فرزند (Permission) استفاده کردیم و اگر یک رکورد جدید Permission ایجاد شود، یک رکورد جدید Respondent نیز ایجاد می‌کنیم و به Context اضافه می‌کنیم. لطفاً مقادیر مورد نیاز برای جدول Respondent را به متناسب با نیازهای واقعی خود تنظیم کنید. همچنین نیاز به بررسی و اعتبارسنجی داده‌ها در متد SaveChanges دارید تا مشکلات احتمالی را مدیریت کنید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •