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

标签 c# entity-framework ef-code-first

我的数据库中有三个实体(至少应该有三个)。 1. 有关优惠的一般信息。 2. 客户名单 3. 报价中的元素 list 。 最初,我从这样一个事实出发:报价中只有一个客户,一切都很好:数据库根据实体数量有三个表。但现在我有一份报价中的客户名单和一个属性来指示谁放置了这个。这导致出现了名为“ProcurementDataCustomers”的第四个表。该表是空的,意味着解析并填充其他表中的数据后,仍然如此。如何才能使创建数据库时不会自动创建该表?有什么办法可以控制这个过程吗?

采购数据

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


        }
    }

最佳答案

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

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

继续 2NF、3...等

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

关于c# - EF6 创建一个额外的空实体(表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58947350/

相关文章:

c# - CMD 上未返回 ExitCode

C#从文件中加载数据并排序到数组中

entity-framework - 具有附加参数的同一实体上的 Entity Framework 多对多关系

c# - 如何将数据库文件导入到使用 Entity Framework 的 C# 控制台应用程序的解决方案中

c# - EF Code First - 通过反射为所有实体调用 MapInheritedProperties()

entity-framework - 我应该使用 Entity Framework 4.1 和 MVC3 启用或禁用动态代理吗?

c# - Entity Framework - Code First 保存多对多关系

c# - 无法隐式列出到 IEnumerable

c# - Azure 上的 OpenRtb 出价器是真的吗?

sql-server - 添加迁移和更新数据库命令未找到 Visual Studio 2015