2010-08-20 37 views
9

sử dụng nhibernate thạo, và automappings (nhibernate tạo schema db của tôi), làm thế nào tôi có thể có được nhibernate để tạo ra một cột nvarchar (max) trong cơ sở dữ liệu dựa trên các lớp sauthành thạo NHibernate automapping như nvarchar (max)

public class VirtualPage : BaseEntity 
{ 
    public virtual int ParentId { get; set; } 
    public virtual string PageName { get; set; } 
    public virtual string Title { get; set; } 
    public virtual string Body { get; set; } 
    public virtual string ViewName { get; set; } 
    public virtual string ViewData { get; set; } // this must be nvarchar(max) 
} 

Trả lời

27

với automapping bạn có thể ghi đè lên chiều dài mặc định cho các lĩnh vực văn bản, nhưng nó sẽ được áp dụng cho tất cả các trường văn bản.

Bạn sẽ có thể kết hợp tự động với ánh xạ rõ ràng được tạo bằng API thông thạo. May mắn thay, đây là một lớp khá đơn giản để vẽ bản đồ (tôi giả định rằng đây là một phần của hệ thống phân cấp theo từng phân lớp, đó là lý do tại sao tôi sử dụng SubClassMap<> thay vì ClassMap<> và không lập bản đồ định danh):

public class VirtualPageMap : SubClassMap<VirtualPage> 
{ 
    public VirtualPageMap() 
    { 
     Map(x => x.ParentId); 
     Map(x => x.PageName); 
     Map(x => x.Title); 
     Map(x => x.Body); 
     Map(x => x.ViewName); 
     Map(x => x.ViewData).Length(4001); // anything over 4000 is nvarchar(max) 
    } 
} 

Tôi chưa bao giờ sử dụng automappings, vì vậy tôi giả định rằng điều này sẽ được chọn đúng cách, nhưng không biết chắc chắn.

Đừng quên thêm ánh xạ vào cấu hình của bạn.

Fluently.configure(
    // blah blah blah 
    .Mappings(m => 
    { 
     m.FluentMappings.AddFromAssemblyOf<VirtualPage>(); 
     m.AutoMappings.Add(// blah blah blah 
    } 
+0

thanx m8, sau ít cấu hình và sử dụng ví dụ của bạn nó hoạt động như một nét duyên dáng .. –

+0

Hãy nhớ rằng sử dụng bản đồ .Length (int.MaxValue) để nvarchar (255). Ngoài ra, không sử dụng .Length ở tất cả, bản đồ để nvarchar (255) – veeroo

2

Set Length tài sản cho một số lượng lớn (tôi sử dụng 10000) - điều này sẽ gây ra NHibernate để thực hiện một nvarchar (max)

+0

cách thiết lập độ dài của thuộc tính? –

+0

Bản đồ (x => x. ) .Length (10000) :-) – Goblin

+0

hmmmm xin lỗi ... có lẽ tôi nên nói với bạn rằng tôi đã bắt đầu sử dụng nhibernate 2 ngày trước :), điều này có nghĩa là tôi hoàn toàn KHÔNG biết nơi đó phải đi. thanx để giúp đỡ mặc dù –

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