Мои извинения за невозможность объяснить проблему.Вот модель Мои классы 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, он заполнен дублирующимися столбцами для всех ограничений внешнего ключа.Что я ищу, так это то, как мы можем сгенерировать точную копию снимка модели, не удаляя базу данных и не воссоздавая таблицы?Я немного скептически отношусь к тому, как работают первые миграции кода.Я почти потерял весь свой дизайн базы данных из-за неправильного кода миграции, который генерируется.Надеюсь, что это поможет вам понять мою проблему с первыми миграциями кода.