2013-08-16 27 views
11

Tôi đang chơi xung quanh với EF 5 và mã đầu tiên. Cho đến nay tôi thực sự thích nó, nhưng tôi đã nhận thấy nó mặc định các cột chuỗi để nvarchar. Nếu tôi muốn sử dụng varchar, sau đó tôi phải nói với nó một cách rõ ràng.Entity Framework 5 mã chuỗi bản đồ đầu tiên để varchar toàn cầu

tôi có thể buộc nó để sử dụng varchar thay vì nvarchar cho chuỗi như sau:

public class Member 
{ 
    public int id { get; set; } 

    [MaxLength(255), Required, Column(TypeName = "varchar")] 
    public string firstName { get; set; } 

    [MaxLength(255), Required, Column(TypeName = "varchar")] 
    public string surname { get; set; } 
} 

tôi thường sẽ sử dụng varchar thay vì nvarchar ở hầu hết các trường hợp mặc dù, vì vậy tôi rất muốn có cột chuỗi toàn cầu ánh xạ tới varchar, và để có thể thiết lập nvarchar trên cơ sở mỗi cột như trên nếu tôi cần.

Có ai biết cách thực hiện việc này không? Tôi đang cố gắng bỏ qua sự cần thiết phải gõ [Cột (TypeName = "varchar")] cho mỗi cột chuỗi trong mô hình của tôi.

Trả lời

4

Bạn phải viết nó như:

[Column(TypeName = "VARCHAR")] 
public string firstName { get; set; } 

Đối với nhiều thông tin xin vui lòng xem xét điều này link

+0

Tôi nhận ra nó có thể được viết như thế này theo ví dụ của tôi. Tôi chắc chắn nó có thể làm điều đó trên toàn cầu mặc dù. –

+0

Bạn có cố gắng thông thạo api cho điều này không ?, bởi vì đôi khi DataAnnotation không cho chúng ta kết quả tốt nhất –

+0

Tôi cũng gặp vấn đề này, và điều này làm việc cho tôi. Nếu bạn đã tạo các cột NVarchar như tôi đã làm, điều này sẽ làm cho việc di chuyển Code First tiếp theo bạn thêm sửa lỗi (chuyển đổi các cột NVarchar thành Varchar). Bravo! –

9

trên EF 6 bạn có thể sử dụng để lập bản đồ tất cả các tài sản chuỗi để sử dụng varchar thay nvarchar

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Properties() 
      .Where(x => 
       x.PropertyType.FullName.Equals("System.String") && 
       !x.GetCustomAttributes(false).OfType<ColumnAttribute>().Where(q => q.TypeName != null && q.TypeName.Equals("varchar", StringComparison.InvariantCultureIgnoreCase)).Any()) 
      .Configure(c => 
       c.HasColumnType("varchar")); 
    } 
+1

Sử dụng tùy chọn này nếu bạn muốn đặt tất cả thành varchar mà không kiểm tra các thuộc tính: 'modelBuilder.Properties () .Configure (c => c.HasColumnType (" varchar "));' –

-1

Hoặc

modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false)); 
Các vấn đề liên quan