2012-11-16 38 views
6

Trong cơ sở dữ liệu của tôi có các bảng Bài tậpNơi làm việc, về mặt khái niệm, mọi bài tập diễn ra tại một nơi làm việc chính xác. Các Phân bảng chứa một cột Workplace, đó là khóa ngoại tham khảo WorkplaceName cột Workplace của bảng.Ánh xạ khóa ngoài cho một khóa khác ngoài khóa chính

Đây là schema:

table Workplace (
    ID int primary key, 
    WorkplaceName int 
) 

table Assignment (
    Workplace int 
) 

Và lập bản đồ của tôi:

class Workplace 
{ 
    public virtual int ID { get; set; } 
    public virtual int WorkplaceName { get; set; } 
} 

class Assignment 
{ 
    public virtual Workplace { get; set; } 
} 

class AssignmentMap : ClassMap<Assignment> 
{ 
    public AssignmentMap() 
    { 
    References(a => a.Workplace); 
    } 
} 

Khi chạy tôi nhận được ngoại lệ

Không liên tiếp với các định danh cho tồn tại [MyProject.Workplace # 2001]

Vấn đề ở đây dường như là FH tìm kiếm giá trị của tài sản Bài tập.Workplace trong cột Nơi làm việc.ID, khóa chính của bảng; địa điểm chính xác sẽ là cột Nơi làm việc.WorkplaceName. Tôi đã cố gắng sử dụng phương pháp ForeignName, nghĩ rằng tôi có thể chỉ định WorkplaceName theo cách này. Làm thế nào tôi có thể cho FH biết cách tham gia các cột chính xác?

Trả lời

2

tôi đã tìm thấy câu trả lời ở đây: FluentNHibernate Many-To-One References where Foreign Key is not to Primary Key and column names are different

Giải pháp là sử dụng PropertyRef; dòng đọc bây giờ:

References(x => x.Workplace).PropertyRef(x => x.WorkplaceName).Fetch.Join(); 

Những gì tôi đã không nhận ra là tôi cần thiết để cung cấp cho một tham chiếu đến đối tượng client-side của khách sạn WorkplaceName, thay vì cố gắng để hướng dẫn việc lập bản đồ sử dụng server-side cột WorkplaceName.

0

Tôi nghĩ rằng nó phải là một cái gì đó giống như

References(x => x.Workplace).Column("WorkplaceName")

+0

Tôi đã thử điều đó; nó không thay đổi kết quả. Tôi tin rằng phương pháp 'Cột' được sử dụng để chỉ định tên cột cục bộ, giống như đối số thứ hai cho' Tham chiếu' - tôi có thể sai về điều đó. – waldrumpus

Các vấn đề liên quan