Tôi đang sử dụng Fluent Nhibernate 1.0 với Sharp Architecture 1.0Fluent NHibernate ánh xạ tham chiếu đến một cột không phải là cột ID
Hiện tại tôi đang cố ánh xạ tham chiếu đến lớp ZipCode. Lớp hiện tại mà tôi đang ánh xạ có cột ZipCode, nhưng lớp zipcode rộng hơn nhiều so với những gì cần thiết cho một mã zip cơ bản, do đó lý do đằng sau điều này. (Về cơ bản lớp mã zip chứa lat. Và lâu dài. Hiện UTC khu vv, tất cả những điều chỉ đọc)
Đây là bản đồ của tôi
References<ZipCode>(x => x.ZipCodeRadius, "ZipCode")
.Column("ZipCode")
.Cascade.None()
//.ForeignKey("FK_ZipCode")
.ReadOnly();
và khi tôi đang chạy thử nghiệm của tôi, tôi nhận được lỗi này.
Phương thức khởi tạo CountryRepositoryTests.Setup đã loại trừ ngoại lệ. System.Data.SqlClient.SqlException: System.Data.SqlClient.SqlException: Cột 'ZipCode.ZipCodeID' không phải là kiểu dữ liệu giống như tham chiếu cột 'Address.ZipCode' trong khóa ngoài 'FK8C1490CB2993CD44'. Không thể tạo ràng buộc. Xem các lỗi trước đó ..
Tôi đã thử thêm ForeignKey và lambda bị ràng buộc, nhưng chúng dường như không thêm bất kỳ thứ gì.
Bảng zipcode có ID, nhưng tôi không muốn ánh xạ tới đó, thay vào đó tôi muốn ánh xạ tới cột mã zip của bảng zipcode, quay lại cột mã zip của bảng địa chỉ.
Nếu có ai có ý tưởng nào về cách tôi có thể giải quyết vấn đề này, tôi thực sự sẽ đánh giá cao điều đó. Vui lòng lưu ý như tôi đã làm ở trên, tôi có thể không chỉ đơn giản là chỉ tham chiếu bảng zipcode và thả thuộc tính vào địa chỉ vì bảng zipcode là chỉ đọc một cách dễ đọc.
Đây là lớp 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; }
Đây là lớp học Địa chỉ
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; }
Đây là ánh xạ bảng mã bưu điện
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();