EF6 创建一个额外的空实体 (table)
EF6 creates an extra and empty entity (table)
我的数据库中有三个实体(至少应该有三个)。
1. 有关要约的一般信息。
2.客户名单
3.报价中的项目列表。
最初,我从报价中只有一个客户并且一切正常的事实出发:根据实体的数量,数据库有三个 table。但现在我有一个报价中的客户列表和一个 属性 来指示是谁放置了这个。这导致出现了第 4 个 table,称为 "ProcurementDataCustomers"。 table是空的,意思是解析填充其他table中的数据后,依然如此。我怎样才能做到在创建数据库时它不会自动创建这个table?有没有办法控制这个过程?
采购数据
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);
}
}
多对多关系需要一个额外的 table... 考虑一下。
编辑:如果您想了解一些关于关系 DDBB 设计的理论,请从这里开始:
https://en.wikipedia.org/wiki/First_normal_form
继续 2NF、3...等
保持简单:如果您在 ProcurementData
中有一个 ICollection<Customer>
,在 Customer
中有一个 ICollection<ProcurementData>
,您需要一个 table 来存储关系 ID-编号.
它是一个连接(多对多)table 因为你有一个 Customers
的列表 ProcurementData
和 反之亦然。
您应该保留它或重新考虑您的数据模型。
我的数据库中有三个实体(至少应该有三个)。 1. 有关要约的一般信息。 2.客户名单 3.报价中的项目列表。 最初,我从报价中只有一个客户并且一切正常的事实出发:根据实体的数量,数据库有三个 table。但现在我有一个报价中的客户列表和一个 属性 来指示是谁放置了这个。这导致出现了第 4 个 table,称为 "ProcurementDataCustomers"。 table是空的,意思是解析填充其他table中的数据后,依然如此。我怎样才能做到在创建数据库时它不会自动创建这个table?有没有办法控制这个过程?
采购数据
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);
}
}
多对多关系需要一个额外的 table... 考虑一下。
编辑:如果您想了解一些关于关系 DDBB 设计的理论,请从这里开始: https://en.wikipedia.org/wiki/First_normal_form
继续 2NF、3...等
保持简单:如果您在 ProcurementData
中有一个 ICollection<Customer>
,在 Customer
中有一个 ICollection<ProcurementData>
,您需要一个 table 来存储关系 ID-编号.
它是一个连接(多对多)table 因为你有一个 Customers
的列表 ProcurementData
和 反之亦然。
您应该保留它或重新考虑您的数据模型。