2010-01-14 28 views
8

तीव्र वास्तुकला 1.0धाराप्रवाह NHibernate एक स्तंभ है कि आईडी स्तंभ

वर्तमान में मैं एक ज़िपकोड वर्ग के लिए एक संदर्भ मैप करने के लिए कोशिश कर रहा हूँ के साथ मैं धाराप्रवाह NHibernate 1.0 का उपयोग कर रहा है के लिए एक संदर्भ मानचित्रण। वर्तमान वर्ग में मैपिंग में एक ज़िपकोड कॉलम है, लेकिन ज़िपकोड क्लास मूल ज़िपकोड के लिए आवश्यकतानुसार कहीं अधिक व्यापक है, इसलिए इसके पीछे तर्क। (मूल रूप से ज़िपकोड वर्ग में शामिल है अक्षां। और लंबे समय। UTC समय क्षेत्र आदि, सभी चीजें हैं जो केवल पढ़ने के लिए कर रहे हैं)

यह मेरा मानचित्रण

  References<ZipCode>(x => x.ZipCodeRadius, "ZipCode") 
      .Column("ZipCode") 
      .Cascade.None() 
      //.ForeignKey("FK_ZipCode") 
      .ReadOnly(); 

है और जब मैं अपने परीक्षण चला रहा हूँ, मैं इस त्रुटि हो रही है।

आरंभिक विधि CountryRepositoryTests.SetUp अपवाद फेंक दिया। System.Data.SqlClient.SqlException: System.Data.SqlClient.SqlException: कॉलम 'ZipCode.ZipCodeID' विदेशी कुंजी 'FK8C1490CB2993CD44' में कॉलम 'पता.जिपकोड' को संदर्भित करने के समान डेटा प्रकार नहीं है। बाधा उत्पन्न नहीं कर सका। पिछले त्रुटियां देखें ..

मैं ForeignKey और कंस्ट्रेन्ड lambdas जोड़ने की कोशिश की है, लेकिन वे कुछ भी शामिल नहीं लग रहा था।

ज़िप कोड में एक आईडी है, लेकिन मैं उस पर मैप करना नहीं चाहता हूं, बल्कि मैं ज़िप तालिका के ज़िप कोड कॉलम पर मैप करना चाहता हूं, फिर पता तालिका के ज़िप कोड कॉलम पर।

अगर किसी के पास कोई विचार है कि मैं इसके आसपास कैसे हो सकता हूं, तो मैं वास्तव में इसकी सराहना करता हूं।

कृपया ध्यान दें के रूप में मैं ऊपर किया है, मैं बस सिर्फ ज़िपकोड तालिका को देख नहीं कर सकते हैं और पता पर संपत्ति छोड़ क्योंकि ज़िपकोड तालिका केवल पढ़ने के लिए है।

यह ज़िपकोड्रैडियस क्लास है।

[NotNullNotEmpty, Length(Max = 5)] 
public virtual string ZipCodeName { get; set; } 
[NotNullNotEmpty, Length(Max = 1)] 
public virtual string ZipType { get; set; } 
[NotNullNotEmpty, Length(Max = 10)] 
public virtual string TimeZone{ get; set; } 

public virtual int UTC { get; set; } 

public virtual double Latitude { get; set; } 
public virtual double Longitude { get; set; } 

public virtual County County { get; set; } 

यह पता वर्ग

protected Address() { } 

public Address(User UpdateUser) 
    : base(UpdateUser) 
{ 
    this.UpdateUserId = UpdateUser.Id.ToString(); 
} 

//[DomainSignature, NotNullNotEmpty] 
//public virtual string Title { get; set; } 

[NotNullNotEmpty, Length(Max = 50)] 
public virtual string AddressLine1 { get; set; } 

[Length(Max = 50)] 
public virtual string AddressLine2 { get; set; } 

[NotNullNotEmpty, Length(Max = 20)] 
public virtual string City { get; set; } 

public virtual StateOrProvince State { get; set; } 

[NotNullNotEmpty, Length(Max = 10)] 
public virtual string ZipCode { get; set;} 

[Length(Max = 10)] 
public virtual string ZipPlus { get; set; } 

public virtual bool IsVerified { get; set; } 

public virtual Country Country { get; set; } 

public virtual ZipCode ZipCodeRadius { get; set; } 

यह ज़िपकोड तालिका मानचित्रण है

Table("ZipCode"); 

Id(x => x.Id, "ZipCodeID"); 

Map(x => x.ZipCodeName, "ZipCode").AsVarChar(5); 
Map(x => x.ZipType, "ZipType").AsVarChar(1); 
Map(x => x.TimeZone, "TimeZone").AsVarChar(10); 
Map(x => x.UTC, "UTC"); 
Map(x => x.Latitude, "Latitude"); 
Map(x => x.Longitude, "Longitude"); 

ReadOnly(); 
Cache.ReadOnly(); 

उत्तर

6

जाहिर HasOne यह करने के लिए उचित तरीके से .... है हालांकि मैंने सोचा कि मैं कोशिश की, मैं PropertyRef याद कर रहा था ...

  HasOne<ZipCode>(x => x.ZipCodeRadius) 
      .PropertyRef(x => x.ZipCodeName) 
      .ForeignKey("ZipCode"); 
संबंधित मुद्दे