2014-12-17 18 views
5

Tôi có mô hình này:Entity Framework và chuỗi như NCLOB trên oracle Db

public class Teacher 
{ 
    public int TeacherID { get; set; } 
    public string Name { get; set: } 
    public string Surname{ get; set; } 
} 

và khi mô hình đầu tiên chạy, nó tạo ra bảng Giáo viên của tôi và DbSet, nhưng đối với Họ và tên (mà là string) nó gán NCLOB gõ vào cột. Bây giờ, với loại NCLOB tôi không thể thực hiện một số thao tác như bằng hoặc phân biệt trên bàn của tôi ....

Làm thế nào tôi có thể bắt MF đặt columntype thành varchar?

Trả lời

6

tôi đã quản lý để giải quyết vấn đề thiết lập các chuỗi chiều dài tối đa vào mô hình

public class Teacher 
{ 
    public int TeacherID { get; set; } 

    [StringLength(255, MinimumLength = 3, ErrorMessage = "My Error Message")] 
    public string Name { get; set: } 

    [StringLength(255, MinimumLength = 3, ErrorMessage = "My Error Message")] 
    public string Surname{ get; set; } 
} 

Nếu không có sự StringLength Orcale tạo một trường NCLOB có thể chứa tới 4Gb dữ liệu.

Lưu ý: chiều dài tối đa cho varchar là 4000 byte, vì vậy chúng tôi không thể thiết lập nhiều hơn 2000 như MaximumLenght (2 byte cho mỗi ký tự Unicode)

+0

Tôi có một int với một. ToString() trong một truy vấn LINQ và nó đang sử dụng TO_NCLOB trong truy vấn được tạo ra. Có cách nào ngăn chặn điều đó không? – JonathanPeel

+0

@JonathanPeel Nếu int có sẵn bên ngoài truy vấn LINQ, bạn có thể chuyển đổi int thành biến chuỗi cục bộ bên ngoài LINQ và sử dụng chuỗi trong truy vấn LINQ. –

+0

Tôi tìm thấy một cách để ánh xạ các phương thức mở rộng cho các hàm Oracle, sử dụng '[Hàm (FunctionType.BuiltInFunction," TO_CHAR ")]'. Sau đó tôi đã tạo một 'int.ToChar()' và nó hoạt động tuyệt vời. – JonathanPeel

4

Cố gắng cấu hình nó một cách rõ ràng:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Teacher>().Property(x => x.Name).HasColumnType("varchar"); 
    modelBuilder.Entity<Teacher>().Property(x => x.Surname).HasColumnType("varchar"); 
} 

Xem Documentation

+0

tôi đã quản lý để giải quyết nó trở thành 'đúng cách'. Tôi sẽ đăng câu trả lời nhưng cảm ơn dù sao đi nữa! – Andrea

+0

chỉ nên là 'varchar2'? – Toolkit

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