2009-07-10 10 views
5

मेरे पास ये कक्षाएं हैं:किसी निहित संग्रह को पॉप्युलेट करने के लिए डेटाबेस दृश्य का उपयोग/मानचित्र कैसे करें?

public class FloorFill 
{ 
    protected FloorFill(){} 
    public virtual ProductCatalog Catalog { get; set; } 
    public virtual Inventory BatchedItem { get; set; } 
    public virtual Transaction Batch { get; set; } 
    public virtual int ItemReference { get; set; } 
    public virtual IList<InventoryLocation> BackstockLocations { get; set; } 
} 
public class InventoryLocation 
{ 
    public InventoryLocation(){} 
    public virtual int Id { get; set; } 
    public virtual int ItemReference { get; private set; } 
    public virtual Location Where { get; set; } 
    public virtual int HowMany { get; set; } 
} 

मेरे पास एक डेटाबेस दृश्य है जो Items को स्थान और कुछ अन्य फ़िल्टरिंग से जोड़ता है। मैं FloorFill.BackstockLocations संग्रह को पॉप्युलेट करने के लिए मैपिंग में इस दृश्य को संदर्भित करना चाहता हूं।

इस संग्रह को पॉप्युलेट करने के लिए मुझे किस दृष्टिकोण का उपयोग करना चाहिए? मैं संग्रह को आलसी लोड के लिए पसंद करूंगा, लेकिन इस बिंदु पर, मुझे डेटा प्राप्त करने में खुशी होगी।

यहां मैपिंग फ़ाइलें हैं:

public class FloorFillMap : EntityBaseMap<FloorFill> 
{   
    public FloorFillMap() 
    { 
     Map(x => x.ItemReference); 
     References(x => x.Catalog, "ProductCatalogId") 
         .WithForeignKey(); 
     References(x => x.Batch, "TransactionId") 
       .WithForeignKey() 
       .Cascade.SaveUpdate(); 
     References(x => x.BatchedItem, "InventoryId") 
       .WithForeignKey() 
       .Cascade.SaveUpdate(); 
     HasMany(x => x.BackstockLocations) 
      .KeyColumnNames.Add("ItemReference") 
      .Inverse() 
      .Cascade.None() 
      .LazyLoad(); 
    } 
} 

public class InventoryLocationMap : ClassMap<InventoryLocation> 
{ 
    public InventoryLocationMap() 
    { 
     WithTable("InventoryLocations"); 
     Id(x => x.Id); 
     References(x => x.Where, "LocationId") 
      .FetchType.Join() 
      .Cascade.None(); 
     Map(x => x.HowMany); 
     ReadOnly(); 
    } 
} 

परिणामी क्वेरी है:

SELECT 
    this_.Id as Id33_0_, 
    this_.Created as Created33_0_, 
    this_.ItemReference as ItemRefe3_33_0_, 
    this_.Modified as Modified33_0_, 
    this_.RowVersion as RowVersion33_0_, 
    this_.ProductCatalogId as ProductC6_33_0_, 
    this_.TransactionId as Transact7_33_0_, 
    this_.InventoryId as Inventor8_33_0_ 
FROM [FloorFill] this_ 

उत्तर

4

एक दृश्य का मिलान, एक मेज मानचित्रण रूप में ही है जब तक कि आप अद्यतन करने के लिए कोशिश मत करो के रूप में

यहाँ मानचित्रण फ़ाइलें हैं यह।

आप इस कथन में क्या करने की कोशिश कर रहे हैं?

References(x => x.Where, "LocationId") 
    .FetchType.Join().WithColumns("Id").Cascade.None(); 

"LocationId" कुंजी स्तंभ नाम है, लेकिन WithColumns कॉल कि मूल्य ऊपर लिख देगा।

क्या हो रहा है या नहीं होने का एक त्रुटि या कुछ अन्य संकेत मदद करेगा।

+0

मैंने WithColumns ("Id") को हटा दिया। चयन कथन इन्वेंटरी लोकेशन की तुलना कर रहा है। FlemFill.Id पर ItemRefence और मुझे इसे FloorFill.ItemRefence पर मैप करने की आवश्यकता है। – Barry

+0

आपके पास WithTableName नहीं होना चाहिए, जिसे अन्य इकाई के मानचित्र से निर्धारित किया जा सकता है। आपके इन्वेंटरी लोकेशन मैप में आपको अपने आईडी पर कॉलमनाम को हटा देना चाहिए क्योंकि यह प्राथमिक कुंजी है, और मानचित्र (x => x.ItemReference) को हटा दें क्योंकि आप अपनी विदेशी कुंजी को संपत्ति के रूप में मैप कर रहे हैं। अब क्या होता है? –

+0

मैंने आपके सुझाए गए परिवर्तनों की मेरी समझ को दर्शाने के लिए कोड सूची संपादित की है। यह बैकस्टॉक स्थान संग्रह नहीं बना रहा है। – Barry