だから、私は次のInvoice
ようなオブジェクトを持っています:
public class Invoice
{
public virtual long InvoiceId { get; set; }
public virtual string InvoiceNumber{ get; set; }
public virtual Customer Customer { get; set; }
public virtual Site Site { get; set; }
public virtual IList<InvoiceLineItem> LineItems { get; set; }
public virtual IList<InvoicePayment> Transactions { get; set; }
}
次に、このような請求書の項目があります
public class InvoiceLineItem
{
public virtual long InvoiceLineItemId { get; set; }
public virtual Invoice Invoice{ get; set; }
}
そして最後に、請求書の支払い
public class InvoicePayment
{
public virtual long InvoicePaymentId { get; set; }
public virtual Invoice Invoice{ get; set; }
}
問題は、これです。 の基礎となるスキーマInvoicePayment
にはInvoiceNumber
、SiteId
(Site
オブジェクトへの) とCustomerId
(Customer
オブジェクトへの) があります。
InvoiceLineItem には、InvoiceId が にリンクしていInvoice
ます。
したがって、Invoice のマッピングは次のようになります。
public sealed class InvoiceMap : ClassMap<Invoice>
{
public InvoiceMap()
{
Table("InvoiceView");
Id(x => x.InvoiceId).GeneratedBy.Identity();
Map(x => x.InvoiceNumber);
References<Site>(x => x.Site, "SiteId");
References<Customer>(x => x.Customer, "CustomerId");
HasMany<InvoiceLineItem>(x => x.LineItems)
.Inverse();
HasMany<InvoicePayment>(x => x.Transactions)
.KeyColumns.Add("SiteId")
.KeyColumns.Add("EPayCustomerId")
.KeyColumns.Add("InvoiceNumber")
.Inverse();
}
}
ラインアイテムのマッピング
public class InvoiceLineItemMap : ClassMap<InvoiceLineItem>
{
public InvoiceLineItemMap()
{
Table("InvoiceLineItems");
Id(x => x.InvoiceLineItemId).GeneratedBy.Identity();
References<FTNI.Core.Model.Invoice.Invoice>(x => x.Invoice, "InvoiceId");
}
}
最後に、請求書支払いのマッピング
public class InvoicePaymentMap : ClassMap<InvoicePayment>
{
public InvoicePaymentMap()
{
Table("InvoicePayments");
Id(x => x.InvoicePaymentId).GeneratedBy.Identity();
CompositeId()
.KeyProperty(x => x.Site, "SiteId")
.KeyProperty(x => x.Customer, "CustomerId")
.KeyProperty(x => x.InvoiceNumber);
References<Site>(x => x.Site, "SiteId");
References<EPayCustomer>(x => x.Customer, "CustomerId");
References<FTNI.Core.Model.Invoice.Invoice>(x => x.Invoice)
.Columns("SiteId", "CustomerId", "InvoiceNumber")
.Nullable();
}
}
だから、そのまま、私はエラーが発生しています
外部キー (FKE9F746C567E71B3F:InvoiceLineItems [InvoiceId])) には、参照される主キー (InvoiceView [SiteId, CustomerId, InvoiceNumber]) と同じ数の列が必要です
複合 ID の請求書支払いと ID 列の項目に結合するようにマッピングを調整するにはどうすればよいですか?