Ядро Entity Framework, генерирующее неправильный снимок модели, хотя у меня есть соответствующий контекст и модель dbsets - PullRequest
0 голосов
/ 09 февраля 2019

Мои извинения за невозможность объяснить проблему.Вот модель Мои классы POCO

namespace RoDbLibrary1.Models
{
   public partial class Creditor
   {
      partial void Init();


      public Creditor()
      {
         CreditorWings = new System.Collections.ObjectModel.Collection<RoDbLibrary1.Models.CreditorWing>();

         Init();
      }


      [Key]
      [Required]
      public int CreditorID { get; set; }


      [Required]
      [MaxLength(10)]
      [StringLength(10)]
      public string CreditorCode { get; set; }

      [Required]
      [MaxLength(60)]
      [StringLength(60)]
      [Display(Name="Debtor Name")]
      public string CreditorName { get; set; }


      [Required]
      [MaxLength(20)]
      [StringLength(20)]
      [Display(Name="Debtor Type")]
      public string CreditorType { get; set; }


      [MaxLength(35)]
      [StringLength(35)]
      [Display(Name="Name of the Head")]
      public string CreditorHeadName { get; set; }

      [Required]
      [MaxLength(150)]
      [StringLength(150)]
      [Display(Name="Designation")]
      public string HeadDesignation { get; set; }


      [MaxLength(300)]
      [StringLength(300)]
      [Display(Name="Full Address")]
      public string Address { get; set; }


      [MaxLength(15)]
      [StringLength(15)]
      [Display(Name="Phone No.")]
      public string PhoneNo { get; set; }


      [MaxLength(35)]
      [StringLength(35)]
      [Display(Name="Email Address")]
      public string EmailAddress { get; set; }

      [Display(Name="Total Credit Amount")]
      public double? TotalCreditAmount { get; set; }

      [Display(Name="Total Paid Amount")]
      public double? TotalPaidAmount { get; set; }

      [Display(Name="Max Credit Limit")]
      public double? MaxCreditLimit { get; set; }

      [Display(Name="Credit Limit Per Month")]
      public double? MaxCreditLimitMonth { get; set; }


      [Required]
      [Display(Name="Starting Date")]
      public DateTime StartDate { get; set; }

      [Display(Name="Closed Date")]
      public DateTime? CloseDate { get; set; }


      [MaxLength(500)]
      [StringLength(500)]
      [Display(Name="Notes")]
      public string Notes { get; set; }


      [Required]
      [Display(Name="Has Wings")]
      public bool HasWings { get; set; }


      [Required]
      [Display(Name="Debtor is Active")]
      public bool Active { get; set; }

      [MaxLength(350)]
      [StringLength(350)]
      public string CreditorImage { get; set; }

      /*************************************************************************
       * Persistent navigation properties
       *************************************************************************/

      public virtual ICollection<RoDbLibrary1.Models.CreditorWing> CreditorWings { get; set; }


   }
}

namespace RoDbLibrary1.Models
{
   public partial class CreditorWing
   {
      partial void Init();


      public CreditorWing()
      {
         RootWing = false;
         WingHeadDetails = new System.Collections.ObjectModel.Collection<RoDbLibrary1.Models.WingHeadDetail>();
         CreditSaleMasters = new System.Collections.ObjectModel.Collection<RoDbLibrary1.Models.CreditSaleMaster>();
         VoucherBooks = new System.Collections.ObjectModel.Collection<RoDbLibrary1.Models.VoucherBooks>();

         Init();
      }



      [Key]
      [Required]
      public int CreditorWingID { get; set; }


      [Required]
      public int CreditorID { get; set; }


      [Required]
      [MaxLength(50)]
      [StringLength(50)]
      public string WingName { get; set; }


      [Required]
      [MaxLength(20)]
      [StringLength(20)]
      public string WingType { get; set; }


      [MaxLength(35)]
      [StringLength(35)]
      public string WingHeadName { get; set; }


      [Required]
      [MaxLength(150)]
      [StringLength(150)]
      public string WingHeadDesignation { get; set; }


      [MaxLength(15)]
      [StringLength(15)]
      public string WingHeadPhoneNo { get; set; }


      [Required]
      public DateTime StartDate { get; set; }

      public DateTime? CloseDate { get; set; }


      public bool? RootWing { get; set; }



      public virtual ICollection<RoDbLibrary1.Models.WingHeadDetail> WingHeadDetails { get; set; }

      public virtual ICollection<RoDbLibrary1.Models.CreditSaleMaster> CreditSaleMasters { get; set; }

      public virtual ICollection<RoDbLibrary1.Models.VoucherBooks> VoucherBooks { get; set; }


      public virtual RoDbLibrary1.Models.Creditor Creditor { get; set; }

   }
}

Код создания модели контекста

 protected override void OnModelCreating(ModelBuilder modelBuilder)
      {
         base.OnModelCreating(modelBuilder);
         OnModelCreatingImpl(modelBuilder);

         modelBuilder.HasDefaultSchema("GasStationDB");

         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .ToTable("Creditors")
                     .HasKey(t => t.CreditorID);
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.CreditorID)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.CreditorCode)
                     .HasMaxLength(10)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.CreditorName)
                     .HasMaxLength(60)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.CreditorType)
                     .HasMaxLength(20)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.CreditorHeadName)
                     .HasMaxLength(35);
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.HeadDesignation)
                     .HasMaxLength(150)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.Address)
                     .HasMaxLength(300);
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.PhoneNo)
                     .HasMaxLength(15);
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.EmailAddress)
                     .HasMaxLength(35);
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.StartDate)
                     .IsRequired()
                     .HasColumnType("Date");

         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.Notes)
                     .HasMaxLength(500);
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.HasWings)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.Active)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.Creditor>()
                     .Property(t => t.CreditorImage)
                     .HasMaxLength(350);

         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .ToTable("CreditorWings")
                     .HasKey(t => t.CreditorWingID);
         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.CreditorWingID)
                     .IsRequired()
                     .ValueGeneratedOnAdd();
         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.CreditorID)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.WingName)
                     .HasMaxLength(50)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.WingType)
                     .HasMaxLength(20)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.WingHeadName)
                     .HasMaxLength(35);
         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.WingHeadDesignation)
                     .HasMaxLength(150)
                     .IsRequired();
         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.WingHeadPhoneNo)
                     .HasMaxLength(15);
         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.StartDate)
                     .IsRequired()
                     .HasColumnType("Date");

         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .Property(t => t.CloseDate)
                     .HasColumnType("Date");

         modelBuilder.Entity<RoDbLibrary1.Models.CreditorWing>()
                     .HasOne(x => x.Creditor)
                     .WithMany(x => x.CreditorWings)
                     .HasForeignKey("CreditorID");
}

Когда я пытаюсь добавить столбец в любую таблицу и добавить миграцию, добавление-migration генерирует код, который добавляет еще один столбец для первичного ключа, в этом случае столбец CreditorID уже существует в таблице creditorwings, но add-миграция добавляет еще один столбец с именем Creditor_ID и удаляет существующий внешний ключ, который является CreditorID с Creditor_ID, а такжедобавлено создание нового индекса для нового столбца.Это происходит со всеми таблицами в базе данных.Когда я смотрю на ModelSnapshot, он заполнен дублирующимися столбцами для всех ограничений внешнего ключа.Что я ищу, так это то, как мы можем сгенерировать точную копию снимка модели, не удаляя базу данных и не воссоздавая таблицы?Я немного скептически отношусь к тому, как работают первые миграции кода.Я почти потерял весь свой дизайн базы данных из-за неправильного кода миграции, который генерируется.Надеюсь, что это поможет вам понять мою проблему с первыми миграциями кода.

...