2015-12-14 58 views
5

Tên miền:thành thạo NHibernate automapping với ghi đè: Bản đồ một unmapped bộ sưu tập lớp cơ sở

public class BaseClassClient 
{ 
    public virtual ICollection<BaseClass> BaseObjects{ get; set; } 
} 

public abstract class BaseClass 
{ 
} 

public class SubClass1 : BaseClass 
{ 
} 

public class SubClass2 : BaseClass 
{ 
} 

tôi nhận được lỗi Association references unmapped class, mặc dù cả các lớp tiểu được ánh xạ. Rõ ràng, bản thân lớp cơ sở không được ánh xạ. Vui lòng đề xuất cách giải quyết vấn đề này.

Sửa

Tôi thà rằng trước khi đóng cửa một câu hỏi như là một bản sao khác, họ chỉ không đọc, mà còn quan tâm để hiểu cả các câu hỏi.

Tôi đã xem câu hỏi Error: fluent NHibernate mapping which references mapping in different assembly. Nhưng nó nói về một kịch bản khác.

Kịch bản của tôi giống như dưới đây.

public class Product 
{ 
    public int Id { get; set; } 
    public ICollection<BasePricingRule> PricingRules{ get; set; } 
} 

public abstract class BasePricingRule 
{ 
    public int Id { get; set; } 
    //other properties 
} 

//Several concrete classes inherit from BasePricingRule. 

Tôi muốn có một bảng cho mỗi lớp bê tông và không có bảng cho lớp cơ sở. Do đó, không có ánh xạ cho BasePricingRule. Tôi cho phép các lớp học tự động được ánh xạ, thỉnh thoảng cung cấp các ghi đè cần thiết. Tôi đã tạo ghi đè tự động cho lớp sản phẩm như dưới đây.

public void Override(FluentNHibernate.Automapping.AutoMapping<Product> mapping) 
    { 
     mapping.HasMany(product => product.PricingRules); //Not really sure 
                  // about how to map this. 
    } 

Tôi đã xem các ví dụ như http://ayende.com/blog/3941/nhibernate-mapping-inheritance cho ánh xạ kế thừa. Nhưng những ví dụ này thực sự không giải quyết được vấn đề tôi đang gặp phải. Nhiều hơn lỗi, tôi muốn biết làm thế nào tôi nên bản đồ tên miền này thông qua NHibernate thông thạo, tốt hơn bằng cách sử dụng ghi đè tự động.

+0

xin vui lòng gửi cấu hình của bạn, bạn đã lập bản đồ lắp ráp để lập bản đồ thông thạo? kiểm tra bài đăng này http://stackoverflow.com/a/6227248/1225337 –

+0

Vâng, tôi đã làm. Loại ánh xạ không phải là vấn đề ở đây. Tôi đã không ánh xạ kiểu lớp cơ sở, nhưng chỉ có các kiểu lớp con cụ thể mà tôi muốn có một bảng. Liên kết mà bạn trỏ đến không giải quyết vấn đề thừa kế này. –

Trả lời

0

Vấn đề là, ngay cả đối với phương pháp tiếp cận Bảng mỗi lớp bê tông, bạn sẽ phải ánh xạ lớp cơ sở. Chỉ cần không phải là cách bạn có thể suy nghĩ. Bạn nên xem xét bài viết tuyệt vời này: www.codeproject.com/Articles/232034/Inheritance-mapping-strategies-in-Fluent-Nhibernat

Nó sẽ là nhiều hơn hoặc ít hơn như thế này:

public class BaseClassMap : ClassMap<BaseClass> { 
    public BaseClassMap() { 
     // indicates that this class is the base 
     // one for the TPC inheritance strategy and that 
     // the values of its properties should 
     // be united with the values of derived classes 
     UseUnionSubclassForInheritanceMapping(); 
    } 
} 

public class SubClass1Map : SubclassMap<SubClass1> { 
    public SubClass1Map() { 
     Table("SubClass1Table"); 
     Abstract(); 
    } 
} 

public class SubClass2Map : SubclassMap<SubClass2> { 
    public SubClass1Map() { 
     Table("SubClass2Table"); 
     Abstract(); 
    } 
} 
Các vấn đề liên quan