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