EF6创建一个额外的空实体(表)

问题描述 投票:0回答:2

我的数据库中有三个实体(至少应该有三个)。1.有关要约的一般信息。2.客户名单3.报价中的项目清单。最初,我从这样一个事实出发:要约中只有一个客户,并且一切都很好:数据库根据实体的数量具有三个表。但是现在,我有一个要约中的客户列表和一个属性,以指示谁放置了这个。这导致出现了第四个表“ ProcurementDataCustomers”。该表为空,这意味着在解析并填充其他表中的数据后,它仍然保持空白。我如何做到这一点,以便在创建数据库时不会自动创建该表?有什么办法可以控制这个过程?

ProcurementData

 public class ProcurementData
    {
        public ProcurementData()
        {
            this.PurchaseObjects = new List<PurchaseObject>();
            this.Customers = new List<Customer>();
            this.PublicationDate = new DateTime();
            this.EndDate = new DateTime();
            this.AuctionDate = new DateTime();
        }

        [Key]
        public string Number { set; get; }
        public string Name { set; get; }
        public double InitialCost { set; get; }

        public DateTime PublicationDate { set; get; }
        public DateTime EndDate { set; get; }
        public DateTime AuctionDate { set; get; }
        public string ApplicanterName { set; get; }

        public virtual ICollection<Customer> Customers { set; get; }

        public virtual ICollection<PurchaseObject> PurchaseObjects { set; get; }


    }

客户

public class Customer
    {
        public Customer()
        {
            this.ProcurementData = new List<ProcurementData>();
            this.PurchaseObjects = new List<PurchaseObject>();
        }
        [Key]
        public string Name { set; get; }

        public string INN { set; get; }

        public string KPP { set; get; }
        public virtual ICollection<ProcurementData> ProcurementData { set; get; }
        public virtual ICollection<PurchaseObject> PurchaseObjects { set; get; }

    }

PurchaseObject

  public class PurchaseObject
    {
        public int Id { set; get; }
        public string Name { set; get; }
        public string OKPD2Code { set; get; }
        public string MeasurementType { set; get; }
        public double Amount { set; get; }
        public double UnitPrice { set; get; }
        public double TotalPrice { set; get; }

        public string CustomerName { get; set; }

        public virtual Customer Customer { get; set; }

        public virtual ProcurementData ProcurementData { get; set; }
    }

DBContext

public class MyDbcontext : DbContext
    {
        public DbSet<ProcurementData> ProcurementData { get; set; }
        public DbSet<Customer> Customers { get; set; }
        public DbSet<PurchaseObject> PurchaseObjects { get; set; }

        public MyDbcontext() : base(nameOrConnectionString: "Default")
        {
            Database.CreateIfNotExists();
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<PurchaseObject>()
                .HasRequired(p => p.ProcurementData)
                .WithMany(p => p.PurchaseObjects);


            modelBuilder.Entity<Customer>()
                .HasMany(p => p.PurchaseObjects);

            modelBuilder.Entity<ProcurementData>()
                .HasMany(c => c.Customers)
                .WithMany( p => p.ProcurementData);

            base.OnModelCreating(modelBuilder);


        }
    }
c# entity-framework ef-code-first
2个回答
1
投票

许多关系需要一个额外的表...考虑一下。

编辑:如果您想了解有关关系DDBB的一些理论,请从这里开始:https://en.wikipedia.org/wiki/First_normal_form

保持简单:如果在ICollection<Customer>中有ProcurementData,在ICollection<ProcurementData>中有Customer,则需要一个表来存储关系ID-Id。


0
投票

它是一个联接(很多)表,因为您有一个Customers列表,而ProcurementData 反之亦然。

您应该保留它或重新考虑您的数据模型。

© www.soinside.com 2019 - 2024. All rights reserved.