entity framework6 – 该类型已配置为实体类型。 它不能重新配置为复杂类型

我有一个实体,我做了一个小改动。 我已经使外键不可空并且需要了。 当我来创建entity framework迁移时,我收到一个错误:

“付款”类型已配置为实体类型。 它不能重新配置为复杂类型。

我不明白为什么会这样。 我没有将任何类定义为复杂类型。 我正在使用Enum,但这一直存在并且从未成为过以前的问题并且在EF6下得到支持。

该项目本身仍然编制好。

这是导致问题的Payment类。

public partial class Payment { public int payment_ID { get; set; } public int order_ID { get; set; } public PaymentTypeEnum paymentType_ID { get; set; } public string cc_response_ReceiptNo { get; set; } public string cc_response_QSIResponseCode { get; set; } public string cc_response_QSIResponseDescription { get; set; } public string cc_response_TransactionNo { get; set; } public string cc_response_BatchNo { get; set; } public DateTime? cc_response_expected { get; set; } public bool? cc_response_checked { get; set; } public DateTime? paymentReceived { get; set; } public int? paymentAmountUnits { get; set; } public string paymentNotes { get; set; } public string cc_GatewayIdent { get; set; } public virtual Order Order { get; set; } public virtual PaymentType PaymentType { get; set; } public virtual ICollection CreditNotes { get; set; } } 

映射信息

  public class tbl_paymentMap : EntityTypeConfiguration { public tbl_paymentMap() { // Primary Key this.HasKey(t => t.payment_ID); // Properties this.Property(t => t.cc_response_ReceiptNo) .HasMaxLength(12); this.Property(t => t.cc_response_QSIResponseCode) .HasMaxLength(2); this.Property(t => t.cc_response_QSIResponseDescription) .HasMaxLength(150); this.Property(t => t.cc_response_TransactionNo) .HasMaxLength(21); this.Property(t => t.cc_response_BatchNo) .HasMaxLength(21); this.Property(t => t.paymentNotes) .HasMaxLength(100); this.Property(t => t.cc_GatewayIdent) .HasMaxLength(50); // Table & Column Mappings this.ToTable("tbl_payment"); this.Property(t => t.payment_ID).HasColumnName("payment_ID"); this.Property(t => t.order_ID).HasColumnName("order_ID"); this.Property(t => t.paymentType_ID).HasColumnName("paymentType_ID"); this.Property(t => t.cc_response_ReceiptNo).HasColumnName("cc_response_ReceiptNo"); this.Property(t => t.cc_response_QSIResponseCode).HasColumnName("cc_response_QSIResponseCode"); this.Property(t => t.cc_response_QSIResponseDescription).HasColumnName("cc_response_QSIResponseDescription"); this.Property(t => t.cc_response_TransactionNo).HasColumnName("cc_response_TransactionNo"); this.Property(t => t.cc_response_BatchNo).HasColumnName("cc_response_BatchNo"); this.Property(t => t.cc_response_expected).HasColumnName("cc_response_expected"); this.Property(t => t.cc_response_checked).HasColumnName("cc_response_checked"); this.Property(t => t.paymentReceived).HasColumnName("paymentReceived"); this.Property(t => t.paymentAmountUnits).HasColumnName("paymentAmountUnits"); this.Property(t => t.paymentNotes).HasColumnName("paymentNotes"); this.Property(t => t.cc_GatewayIdent).HasColumnName("cc_GatewayIdent"); // Relationships this.HasRequired(t => t.Order) .WithMany(t => t.Payments) .HasForeignKey(d => d.order_ID); this.HasRequired(t => t.PaymentType) .WithMany(t => t.Payments) .HasForeignKey(d => d.paymentType_ID); } } 

好吧,结果certificate这是我自己做的一个奇怪的事情。 在我的支付类旁边有一个CreditNote类。 您可以在我的原始问题中看到一个付款可能有很多信用票据。

除此之外,付款和信用票据都单独引用了订单。

在执行一些规范化的过程中,我从信用票据类中删除了订单类的链接。 在修复随之而来的错误的同时,我找到并替换了一些beserk,并在信用票据映射中无意中执行了它。

从而

  public tbl_creditnoteMap() { this.Property(t => t.order_ID).HasColumnName("order_ID"); 

成为

  public tbl_creditnoteMap() { this.Property(t => t.Payment.order_ID).HasColumnName("order_ID"); 

实际上它应该完全删除。 这显然打破了幕后的事情。

将以下内容添加到OnModelCreating中,我认为解决了您的问题:

 modelBuilder.Ignore();