c# - EF6 创建一个额外的空实体(表)
问题描述
我的数据库中有三个实体(至少应该有三个)。1. 关于报价的一般信息。2. 客户列表 3. 报价中的项目列表。最初,我从报价中只有一个客户的事实出发,一切都很好:数据库根据实体的数量有三个表。但是现在我有一份报价中的客户列表和一个属性来表明谁放置了这个。这导致出现了名为“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>
inProcurementData
和一个ICollection<ProcurementData>
in,Customer
你需要一个存储关系 Id-Id 的表。
推荐阅读
- google-bigquery - BigQuery:一个查询作业可以在一个表上运行而另一个查询作业操作该表吗?
- ruby-on-rails - 使用 Postgres 处理 Rails 应用服务器中查询参数中的转义序列
- javascript - Javascript:如何检查特定键是否存在
- postman - 如何使用 https 制作邮递员文档示例
- oracle - 如何从 oracle 报告应用程序 ERP 生成 excel 文件?
- c - 似乎基于堆栈的变量在 C 函数后没有被释放
- javascript - 将 JavaScript 代码重构为 jQuery 代码
- android - 集成firebase导致android崩溃
- python - 类型不正确。预期的 pk 值,收到的字典。Django 休息框架 - Vue
- supervisord - 在运行 supervisorctl reread 时出现错误