Sto usando NHibernate Fluent 1.0 con Sharp Architettura 1.0Fluent NHibernate mappatura un riferimento a una colonna che non è la colonna ID
Attualmente sto cercando di mappare un riferimento a una classe ZipCode. La classe corrente che sto mappando ha una colonna ZipCode, ma la classe zipcode è molto più ampia di quella necessaria per un codice di avviamento di base, da qui il ragionamento alla base di questo. (Fondamentalmente classe CAP contiene lat. E lunga. Fuso orario UTC, ecc, tutte le cose che sono di sola lettura)
Questo è il mio mappatura
References<ZipCode>(x => x.ZipCodeRadius, "ZipCode")
.Column("ZipCode")
.Cascade.None()
//.ForeignKey("FK_ZipCode")
.ReadOnly();
e quando sto facendo funzionare le mie prove, sto ottenendo questo errore.
Metodo di inizializzazione CountryRepositoryTests.SetUp ha generato un'eccezione. System.Data.SqlClient.SqlException: System.Data.SqlClient.SqlException: colonna 'ZipCode.ZipCodeID' non è lo stesso tipo di dati della colonna di riferimento 'Address.ZipCode' nella chiave esterna 'FK8C1490CB2993CD44'. Impossibile creare il vincolo. Vedi errori precedenti ..
Ho provato ad aggiungere il ForeignKey e il lambda con vincoli, ma sembrava che non aggiungessero nulla.
Le tabelle di codice di avviamento postale hanno un ID, ma non voglio mapparlo, piuttosto voglio mappare alla colonna di codice di avviamento postale della tabella di codice postale, indietro alla colonna di codice postale della tabella di indirizzo.
Se qualcuno ha qualche idea su come aggirare questo, lo apprezzerei molto.
Si prega di notare come ho fatto sopra, non posso semplicemente fare riferimento alla tabella zipcode e rilasciare la proprietà sull'indirizzo perché la tabella zipcode è di sola lettura.
Questa è la classe ZipCodeRadius.
[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; }
Questa è la classe Indirizzo
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; }
Questa è la mappatura tavolo ZipCode
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();