0

我正在尝试使用流利的 api 定义与同一对象的两个多对多关系。

这是简化的模型:

public class PurchaseRequisition
{
    [Key, ForeignKey("Transaction")]
    public int TransactionId { get; set; }
    public virtual ICollection<People> RequisitionedBys { get; set; }
    public virtual ICollection<People> AuthorizedSignatures { get; set; }
}

public class People
{
    [Key]
    public string Id{ get; set; }
    public string FullName { get; set; }
    public virtual ICollection<PurchaseRequisition> PurchaseRequisitionsForRequisitionedBys { get; set; }
    public virtual ICollection<PurchaseRequisition> PurchaseRequisitionsForAuthorizedSignatures { get; set; }
}

这是流畅的api代码:

modelBuilder.Entity<PurchaseRequisition>()
.HasMany(a => a.RequisitionedBys)
.WithMany(b => b.PurchaseRequisitionsForRequisitionedBys)
.Map(x =>
{
    x.MapLeftKey("PurchaseRequisitionId");
    x.MapRightKey("RequisitionedById");
        x.ToTable("PurchaseRequisitionRequisitionedBy");
});

modelBuilder.Entity<PurchaseRequisition>()
.HasMany(a => a.AuthorizedSignatures)
.WithMany(b =>b.PurchaseRequisitionsForAuthorizedSignatures)
.Map(x =>
{
    x.MapLeftKey("PurchaseRequisitionId");
    x.MapRightKey("AuthorizedSignatureId");
    x.ToTable("PurchaseRequisitionAuthorizedSignature");
});

我想要的是生成两个单独的链接表,但 EF 生成的是 People 表中 PurchaseRequisition 的两个外键列和 PurchaseRequisition 字段中 People 的 1 个外键列。

谁能告诉我可能出了什么问题?

4

1 回答 1

0

问题已解决。

我错误地认为我的数据库初始化程序代码会删除并重新创建数据库,因为我对模型类进行了更改并且我的初始化程序类扩展了 DropCreateDatabaseIfModelChanges。

正如 Slauma 所建议的那样,即使模型已经更改,也没有达到流畅的 api 代码。我正在使用 SetInitializer() 方法设置初始化程序,并且此代码仅在我第一次使用上下文实例访问数据库时运行。

于 2012-04-25T14:25:58.760 回答