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

C# EF6创建一个额外的空实体(表),c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我的数据库中有三个实体(至少应该有三个)。 1.关于报价的一般信息。 2.客户名单 3.报价中的项目列表。 最初,我的出发点是,报价中只有一个客户,而且一切都很好:根据实体的数量,数据库有三个表。但现在我有了一份报价中的客户名单和一处房产,以表明是谁放了这一张。这导致出现了第四个表“ProcurementDataCustomers”。该表是空的,这意味着在解析和填充其他表中的数据后,它仍然是空的。如何使创建数据库时不会自动创建此表?有没有办法控制这个过程 采购数据 DBContext 公共类My

我的数据库中有三个实体(至少应该有三个)。 1.关于报价的一般信息。 2.客户名单 3.报价中的项目列表。 最初,我的出发点是,报价中只有一个客户,而且一切都很好:根据实体的数量,数据库有三个表。但现在我有了一份报价中的客户名单和一处房产,以表明是谁放了这一张。这导致出现了第四个表“ProcurementDataCustomers”。该表是空的,这意味着在解析和填充其他表中的数据后,它仍然是空的。如何使创建数据库时不会自动创建此表?有没有办法控制这个过程

采购数据 DBContext
公共类MyDbcontext:DbContext
{
公共数据库集ProcurementData{get;set;}
公共数据库集客户{get;set;}
公共DbSet PurchaseObjects{get;set;}
public MyDbcontext():base(名称或连接字符串:“默认”)
{
CreateIfNotExists();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(p=>p.ProcurementData)
.WithMany(p=>p.PurchaseObject);
modelBuilder.Entity()
.HasMany(p=>p.PurchaseObjects);
modelBuilder.Entity()
.HasMany(c=>c.Customers)
.有许多(p=>p.ProcurementData);
基于模型创建(modelBuilder);
}
}

多对多关系需要一个额外的表。。。想想看

编辑:如果您想了解有关关系DDBBs设计的一些理论,请从这里开始:

继续2NF,3。。。等

保持简单:如果在
ProcurementData
中有一个
ICollection
,在
Customer
中有一个
ICollection
,您需要一个存储关系Id-Id的表。

这是一个联接(多对多)表,因为您在年
ProcurementData
中有一个
客户列表,反之亦然


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

谢谢!我会读的。你和Stefan的回答(在我看来)导致了这张桌子空着的原因。这张桌子真的应该是。我在一般情况下实现了实体之间的这些关系,但目前我没有使用所有的特性。特别是,在解析时,我不会输入特定客户(在客户端)参与哪个产品的信息。只有在采购数据中,我才填写客户名单。我不知道这种方法有多正确?老实说,这是我第一次使用数据库。@Pavel:至于你的问题:如果你预计在不久的将来需要这种关系,你应该保留它。如果没有,您可以将其删除。因为这是你的第一次尝试;它可能会发生变化。EF为迁移提供了很好的功能,因此这将很容易。即使你经验丰富,你也会发现自己需要时不时地改变模型,所以不要担心错误,这是开发过程的一部分;-)@Stefan,我试过了,但是我的声誉低于15(我最近注册),所以我的投票只会被考虑在内,而不会被显示(根据弹出的消息:-)谢谢!你和DrkDeveloper的回答(在我看来)导致了这张桌子空着的原因。这张桌子真的应该是。我在一般情况下实现了实体之间的这些关系,但目前我没有使用所有的特性。特别是,在解析时,我不会输入特定客户(在客户端)参与哪个产品的信息。只有在采购数据中,我才填写客户名单。我不知道这种方法有多正确?老实说,这是我第一次使用数据库。
 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; }

    }
  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; }
    }
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);


        }
    }