Невозможно создать объекты заполнения данных для отношения «многие к одному» EntityFrameworkCore - PullRequest
0 голосов
/ 11 июня 2019

Я хочу создать объекты, которые можно использовать в качестве данных заполнения.Но я получаю стек, когда я прихожу к многим к одному столу.Я пробовал также отношения многие ко многим, но каждый раз, когда я получаю стеки к одной и той же точке (многие к одному).Если это один ко многим, это не проблема:

Соотношение таблиц базы данных

Коды создания таблиц:

public class CorporateCustomer
{   
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CorporateCutomerId { get; set; }

    [Required]
    [MinLength(5, ErrorMessage = "Customer name cann't be less then 5 charecter !")]
    public string Name { get; set; }

    public virtual ICollection<CorporateCustomerContact> Contacts{ get; set; }
    public virtual ICollection<CorporateCustomerAddress> Addresses { get; set; }
    public virtual ICollection<CorporateCustomerFleet> Fleets { get; set; }
}

 public class CorporateCustomerAddress
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int AddressId { get; set; }
    [Required]
    [MaxLength(30, ErrorMessage = "House Number needs to be less then 30 charecter in length")]
    public string HouseNo { get; set; }
    [Required]
    [MaxLength(20, ErrorMessage = "Road name needs to be less then 20 charecter")]
    public string Road { get; set; }
    [Required]
    [MaxLength(20, ErrorMessage = "City name needs to be less then 20 charecter")]
    public string City { get; set; }
    [Required]
    [StringLength(10, MinimumLength = 3, ErrorMessage = "Post code needs to be between 3 to 10 charecter in length")]
    public string PostCode { get; set; }
    [Required]
    [MaxLength(20, ErrorMessage = "Country name cannot be more than 20 charecter in length")]
    public string Country { get; set; }


    public bool IsDeleted { get; set; }


    // Relation with corporate customer
    public int CorporateCutomerId { get; set; }
    public CorporateCustomer CorporateCutomer { get; set; }   
}

Я пробовал решение сКласс ModelBuilder выглядит следующим образом:

public static void SeedData(this ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<CorporateCustomer>().HasData(new CorporateCustomer
        {
            CorporateCutomerId = 1,
            Name = "Micro Tech",
            Addresses = new List<CorporateCustomerAddress>()
            {
                modelBuilder.Entity<CorporateCustomerAddress>().HasData (
                    new CorporateCustomerAddress
                    {
                        AddressId = 1,
                        HouseNo = "36/B",
                        Road = "Lalkha Road, Fatullah",
                        City = "Dhaka",
                        PostCode = "14221"
                    })

            }
        });
    }

Попытка DbContext на самом деле не вставляет в базу данных:

public static void SeedData(this ApplicationDbContext context)
    {
        var CorporateCustomerFleet = new List<CorporateCustomerFleet>()
        {
            new CorporateCustomerFleet
            {
                CorporateCutomer = new CorporateCustomer()
                {
                    Name = "Tech Realm",
                    Contacts = new List<CorporateCustomerContact>()
                    {
                        new CorporateCustomerContact()
                        {
                            Contact = "0088015AV757501",
                        },
                        new CorporateCustomerContact()
                        {
                            Contact = "0088018AB030022",
                        }
                    },
                    Addresses = new List<CorporateCustomerAddress>()
                    {
                        new CorporateCustomerAddress()
                        {
                            HouseNo = "36/B",
                            Road = "Fatullah, Lalkha Road",
                            City = "Dhaka"
                        }
                    }
                }
            }
        };
   Context.CorporateCustomerFleet.AddRange(CorporateCustomerFleet );
   Context.SaveChanges();
    }
...