11

Tôi nghĩ rằng điều này phải đơn giản, nhưng tôi không thể tìm ra cách để làm điều đó. Giả sử tôi có các bản đồ sau:Fluent Nhibernate 1.0 - Chỉ định tên ràng buộc khóa ngoài giữa lớp và tham gia lớp con

public class AnimalMap : ClassMap<Animal> { Id(x => x.Id); } 

public class CatMap: SubclassMap<Cat> { 
    Extends<AnimalMap>(); 
    Map(x => x.IsDomestic); 
} 

nào tạo ra bảng như tôi mong đợi:

Animal 
------ 
Id 

Cat 
---- 
AnimalId : FK to Animal (named FK3500ABA0D) 
IsDomestic 

Như đã đề cập, các FK được tạo ra bởi các db và kết thúc lên như FK3500ABA0D. Tất cả tôi muốn làm là đặt tên của hạn chế đó, nhưng tôi không thể tìm thấy làm thế nào để làm điều đó thông qua Fluent NHibernate (hoặc thực sự ngay cả NHibernate, cho rằng vấn đề).

Vì vậy, tôi đang thiếu gì?

+0

FNH 1.0 không có khả năng FKS tên. Câu trả lời được chấp nhận của tôi liên quan đến phiên bản đó, nhưng các phiên bản sau này sẽ thấy câu trả lời dưới đây. – Andy

Trả lời

0

Tôi không biết nếu FluentNH hỗ trợ nó, nhưng XML là đơn giản:

<joined-subclass name="Cat"> 
    <key column="AnimalId" foreign-key="NameOfTheFK"/> 
</joined-subclass> 
21

thạo NH không cho phép điều này:

public class ReferenceConvention : IReferenceConvention{ 
    public void Apply(IManyToOneInstance instance) { 
      instance.ForeignKey(string.Format("FK_{0}_{1}", 
       instance.EntityType.Name, 
       instance.Name)); 
    } 
} 

Bạn cũng sẽ cần phải thực hiện IHasManyConventionIHasManyToManyConvention theo cách tương tự như trên.

+0

FYI, tại thời điểm câu hỏi được hỏi và trả lời rằng tính năng đó không có trong FNH. Tôi đã cập nhật câu hỏi và để lại nhận xét giải thích lý do tại sao câu trả lời được chấp nhận không bị thay đổi. Cảm ơn câu trả lời của bạn! – Andy

0

tôi đã cùng một vấn đề, các công việc sau tốt cho tôi:

public class JoinedSubclassForeignKeyConvention : IJoinedSubclassConvention 
{ 
    public void Apply(IJoinedSubclassInstance instance) 
    { 
     if (instance.Type.BaseType != null) 
      instance.Key.ForeignKey(string.Format("FK_{0}_{1}", instance.EntityType.Name, instance.Type.BaseType.Name)); 
    } 
} 

ràng buộc khoá ngoại của bạn sau đó sẽ được đặt tên như FK_Cat_Animal

+0

Tuy nhiên, công việc này có hoạt động với FNH 1.0 không? Các phiên bản sau đã khắc phục được sự cố, nhưng câu hỏi này là khoảng 1.0 đặc biệt. – Andy

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