50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

مشکل در ایجاد کلید خارجی

باسلام
من کلاسهای زیر را نوشته ام

    public class User
    {
        #region Property
        public Guid UserId { get; set; }

        public string UserName { get; set; }
        public string Password { get; set; }


        #endregion Property

        #region References
        public List<Access> Accesses { get; set; }
        #endregion References


        internal class UserConfiguration : IEntityTypeConfiguration<User>
        {
            public void Configure(EntityTypeBuilder<User> builder)
            {
                builder.ToTable("User", schema: Schema.Administrator);
                builder.HasComment("جدول کاربران سیستم ");
                builder.HasKey(k => k.UserId)
                    .IsClustered();
                builder.Property(p => p.UserId)
                    .HasComment("کلید اصلی");
            }
        }
    }


    public class Access : EntityBase
    {
        #region Property
        public Guid AccessId { get; set; }
        public Guid UserId { get; set; }
        public User User { get; set; }
        #endregion Property

        #region References
        #endregion References

        internal class UserConfiguration : IEntityTypeConfiguration<Access>
        {
            public void Configure(EntityTypeBuilder<Access> builder)
            {
                builder.ToTable("Access", schema: Schema.Administrator);

                builder.HasComment("جدول دسترسی");
                builder.HasKey(k => k.AccessId)
                    .IsClustered();
                builder.Property(p => p.AccessId)
                    .ValueGeneratedNever()
                    .HasComment("کلید اصلی");


                #region Relation

                builder.HasOne(o => o.User)
                    .WithMany(m => m.Accesses)
                    .HasForeignKey(f => f.UserId)
                    .HasConstraintName("FK_Access_User_UserId");
                #endregion Relation


            }
        }
    }


اما وقتی migration اجرا میکنم
خطا زیر را میدهد

Introducing FOREIGN KEY constraint 'FK_Access_User_UserId' on table 'Access' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint or index. See previous errors.


برای حل مشکل باید چه تغییر باید در کدم بدهم


پرسیده شده در 1400/03/27 توسط

3 پاسخ

0

فقط همین دو کلاس رو دارید ؟


یه راهش اینه که یه attribuet بالای روس user در کلاس access بزارید و foreigh key رو معرفی کنید :


    public class Access : EntityBase
    {
        #region Property
        public Guid AccessId { get; set; }
        public Guid UserId { get; set; }
        [ForeignKey("UserId")]      

      public User User { get; set; }
        #endregion Property

      


راه دیگه اش هم اینه که کلا کد زیر رو به context اضافه کنید :

 protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(s => s.GetForeignKeys()))
            {
                relationship.DeleteBehavior = DeleteBehavior.Restrict;
            }

            base.OnModelCreating(modelBuilder);
        }


این لینک رو بخونید :

https://stackoverflow.com/questions/17127351/introducing-foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths 



پاسخ در 1400/03/27 توسط
1

اون لینکی که دادم رو بخونید ، داره میگه ممکنه تو کلاس های شما یه loop درست شده باشه که از دو طریق یه کلاس delete شه ...


که البته این روش دوم جلوش رو میگیره.

پاسخ در 1400/03/29 توسط
0

سلام
کلاسهای دیگری هم دارد اما مشکل فقط درAccess  هست
(یه راهش اینه که یه attribuet بالای روس user در کلاس access بزارید و foreigh key رو معرفی کنید )این روش جواب نداد

 protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(s => s.GetForeignKeys()))
            {
                relationship.DeleteBehavior = DeleteBehavior.Restrict;
            }

            base.OnModelCreating(modelBuilder);
        }

اما این روش جواب داد

پاسخ در 1400/03/29 توسط

پاسخ شما