0

上の他の子との関係は、だから、私はInvoiceオブジェクトそうのようにあります。そして、流暢アイデンティティの1子との関係、複合キー

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,SiteIdSiteオブジェクト)、CustomerIdCustomerオブジェクト)を持っています。

InvoiceLineItemには、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(); 

    } 
} 

ので

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"); 
    } 
} 

そして最後に、私の請求書の支払いマッピング:

ので、請求書のための私のマッピングは、次のようになります、エラーが発生します

私は私ので、私のマッピングを調整することができますどのように)参照される主キー(InvoiceView [SITEID、CustomerIdの、InvoiceNumber])と同じ数の列を持っている必要があります

外部キー(InvoiceLineItems [InvoiceId] FKE9F746C567E71B3Fは)コンポジットIDのインボイス支払いとID列の広告申込情報に参加しますか?

答えて

1

エラーメッセージはちょっと変わっています。 CompositeId()...InvoiceMapにこのエラーが発生すると思います。

このエラーは、各エンティティには1つのIDしか持たないため、CompositeIdへの呼び出しが以前のId呼び出しをオーバーライドしていることに起因します。したがってInvoiceのIDはCompositeIdで、InvoiceLineItemの単一の列は一致しません。

次のことを試してください。

public class Invoice 
{ 
    public virtual long InvoiceId { get; set; } 

    public virtual InvoiceIdentity Identity { get; set; } 

    public virtual IList<InvoiceLineItem> LineItems { get; set; } 
    public virtual IList<InvoicePayment> Transactions { get; set; } 

} 

public class InvoiceIdentity 
{ 
    public virtual string InvoiceNumber{ get; private set; } 
    public virtual Customer Customer { get; private set; } 
    public virtual Site Site { get; private set; } 
    public Identity(string invoicenumber, Customer customer, Site site) 
    { 
     InvoiceNumber = invoicenumber; 
     Customer = customer; 
     Site = site; 
    } 
} 

public sealed class InvoiceMap : ClassMap<Invoice> 
{ 
    public InvoiceMap() 
    { 
     Table("InvoiceView"); 

     Id(x => x.InvoiceId).GeneratedBy.Identity(); 


     Component(x => x.Identity, c => 
     { 
      c.Map(x => x.InvoiceNumber); 

      c.References(x => x.Site, "SiteId"); 
      c.References(x => x.Customer, "CustomerId"); 
     }); 

     HasMany(x => x.LineItems) 
      .Inverse(); 

     HasMany(x => x.Transactions) 
      .PropertyRef(i => i.Identity) 
      .KeyColumns.Add("SiteId", "EPayCustomerId", "InvoiceNumber") 
      .Inverse(); 
    } 
} 

public class InvoicePaymentMap : ClassMap<InvoicePayment> 
{ 
    public InvoicePaymentMap() 
    { 
     Table("InvoicePayments"); 

     Id(x => x.InvoicePaymentId).GeneratedBy.Identity(); 

     References(x => x.Invoice) 
      .Columns("SiteId", "CustomerId", "InvoiceNumber") 
      .PropertyRef(i => i.Identity) 
      .Nullable(); 

    } 
} 
関連する問題